Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 31.10.2019
Сообщений: 39
1

Что эффективнее по времени и нагрузке

31.07.2020, 20:27. Показов 385. Ответов 5
Метки c++ (Все метки)

Author24 — интернет-сервис помощи студентам
Доброй ночи, благодарю за уделённое внимание, вопрос таков:
У меня есть определенный класс в котором this не может быть равен nullptr, потому что этот this используется для получение данных в памяти к примеру
C++
1
auto healthsnake = *(int*)((uintptr_t)this + 0x10);
Если в этом фрагменте this будет nullptr то будет краш, у меня 2 идеи,1) я в функции проверяю
C++
1
if(!this)
дальше выбрасываю throw дальше catch его ловит
полный код
C++
1
2
3
4
5
6
7
try {
cout <<<Player->GetHealth()<< endl;//this = nullptr
}
catch(exception&a)
{
cout << a.what() << endl;
}
2) Опять же в функции проверяю
C++
1
if(!this)
но вместо throw делаю так
C++
1
2
3
4
if(!this){
cout<< "this nullptr"<< endl;
return 0;
}
Какой способ лучше, можете и свой предложить если жалко, опять же спасибо за внимание
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.07.2020, 20:27
Ответы с готовыми решениями:

что эффективнее?
как лучше создавать запрос, допустим Пусть требуется узнать не поставщиков продукта 11, как это...

Что эффективнее?
Здравствуйте уважаемые форумчане! Подскажите: что эффективнее seo+ppc (реклама в яндекс.директ или...

Что эффективнее?
У меня есть трехмерный массив содержащий определенные элементы.У этих элементов есть индивидуальные...

Что эффективнее?
Привет всем,посоветуйте вот у меня очень много txt файлов,я произвожу поиск по ним,и открываю...

5
Неэпический
 Аватар для Croessmah
18116 / 10702 / 2063
Регистрация: 27.09.2012
Сообщений: 26,958
Записей в блоге: 1
31.07.2020, 20:34 2
this и так не может быть законно равен nullptr.
0
0 / 0 / 0
Регистрация: 31.10.2019
Сообщений: 39
31.07.2020, 20:37  [ТС] 3
Croessmah, Поверь, я бы не стал писать если б не было исключения с ошибков this is nullptr )
0
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.07.2020, 20:39 4
Цитата Сообщение от Saaler Посмотреть сообщение
if(!this)
это - бесссмысленная проверка, потому что this не может быть равен нулю.
оптимизирующий компилятор может удалить проверку из кода за ненадобностью.

например:
https://rextester.com/RECLTT65411

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
struct some
{
    void foo() const
    {
        if(!this)
            std::cout << "UB\n";
    }
};
 
int main()
{
    some* p = nullptr;
    p->foo();
}
Код
312260551/source.cpp: In member function ‘void some::foo() const’:
312260551/source.cpp:8:9: warning: nonnull argument ‘this’ compared to NULL [-Wnonnull-compare]
         if(!this)
         ^~
Цитата Сообщение от Saaler Посмотреть сообщение
Если в этом фрагменте this будет nullptr то будет краш
попробуй сначала воспроизвести ситуацию,
когда this внезапно оказался равен нулю.

приведенная выше ситуация с разыменовыванием нулевого указателя - UB,
которой в принципе не должно возникать в реальном коде.

итого:
нет смысла думать:
как лучше сделать проверку на ситуацию которой быть не должно.

есть смысл подумать:
как сделать так, что бы ситуация которой быть не должно,
не смогла возникнуть.
0
Неэпический
 Аватар для Croessmah
18116 / 10702 / 2063
Регистрация: 27.09.2012
Сообщений: 26,958
Записей в блоге: 1
31.07.2020, 20:39 5
Saaler, это значит, что у тебя где-то в коде вызывается функция-член через нулевой указатель, что как бы уже является ошибкой и исправлять её нужно там, а не городить нерабочие костыли здесь.
0
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.07.2020, 20:40 6
Цитата Сообщение от Saaler Посмотреть сообщение
Поверь, я бы не стал писать если б не было исключения с ошибков this is nullptr )
ну так ищи, и исправляй баг в своём коде.
0
31.07.2020, 20:40
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.07.2020, 20:40
Помогаю со студенческими работами здесь

Vector::swap и std::move - что эффективнее?
Пусть имеется пустой вектор A и заполненный некими данными вектор B. Тогда какой из методов более...

Что эффективнее SEO или Директ (Бегун, Adwords)
Какая реклама эффективнее для сайта строительной тематики SEO или Директ (Бегун, Adwords)...

Что быстрее/эффективнее malloc/realloc или new/delete?
Всем привет. Год программировал на СИ под микроконтроллеры... Начал изучать с++... Всё ново,...

Кулер на северный мост или обдув сбоку? Что эффективнее?
Добрый день! У меня на матплате (ga 990xa-ud3) очень горячий северный мост. Вначале хотел...

При нагрузке в играх или вообще нагрузке многозадачностью, компьютер уходит в перезагрузку
У меня проблема - при нагрузке в играх или вообще нагрузке многозадачностью, компьютер уходит в...

Ошибка при нагрузке (предполагаю что на видеокарту) перезагрузка компьютера
Заранее извиняюсь, первый раз пользуюсь вашим форумом. Сегодня с утра возникла проблема,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
Rust или Go? А может C++?
hw_wired 28.01.2025
С каждой новой технологией или методологией появляются новые языки программирования, призванные решать конкретные задачи либо улучшать аспекты производительности и безопасности. Среди множества. . .
Fortran и WinAPI: как создать приложение с графическим интерфейсом
hw_wired 28.01.2025
Fortran — это один из старейших высокоуровневых языков программирования, широко используемый в науке и инженерии уже несколько десятилетий. Его название происходит от "Formula Translation" (перевод. . .
Списки в Haskell
hw_wired 28.01.2025
Haskell является функциональным языком программирования, который отличается лаконичностью синтаксиса и мощными абстракциями. Важным концептом в Haskell являются списки — упорядоченные коллекции. . .
Функции высшего порядка в Haskell
hw_wired 28.01.2025
Haskell – это современный функциональный язык программирования, который получил широкое распространение благодаря своей выразительности и мощным абстракциям. Одной из ключевых особенностей Haskell. . .
Как в цикле обойти все поля объекта в JavaScript
bytestream 28.01.2025
Объекты в JavaScript представляют собой фундаментальные структуры данных, которые позволяют хранить и организовывать связанную информацию в виде пар ключ-значение. Каждый объект можно представить как. . .
Как выбрать строки в DataFrame по значению столбца в Pandas
bytestream 28.01.2025
В области анализа данных библиотека Pandas стала незаменимым инструментом для работы с табличными данными в Python. Эта мощная библиотека предоставляет множество функций для эффективной обработки и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru