Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Некий_Чел
3 / 3 / 0
Регистрация: 27.05.2012
Сообщений: 115
#1

Стоит ли избегать указателя this? - C++

29.01.2016, 11:10. Просмотров 333. Ответов 16
Метки нет (Все метки)

Слышал от знакомого, что обращение к полям класса через указатель this трудоёмкая операция и лучше её избегать в программах со сложными вычислениями. Насколько это правдоподобно и почему?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2016, 11:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стоит ли избегать указателя this? (C++):

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя? - C++
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс) увеличивается на 4 (размер int в...

Как сделать функцию от указателя на класс и указателя на метод? - C++
Не получается сделать функцию, параметрами которой являются указатель на класс и на метод. Обращаться к классу нужно именно по указателю,...

Преобразование кода без указателя в код с использованием указателя - C++
Правильно ли выполнил? Исходный код без указателя #include <iostream> #include <cstdlib> #include <fstream> using namespace...

В чём отличие константного указателя и указателя на константу? - C++
int *const p1 и int const* p2 Объясните мне в чём тут отличие.

Почему следует избегать явного приведения типов? (по возможности) - C++
Почему следует избегать явного приведения типов? (по возможности)

Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ... - C++
Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ... как сделать...

16
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
29.01.2016, 11:16 #2
Цитата Сообщение от Некий_Чел Посмотреть сообщение
this трудоёмкая операция и лучше её избегать в программах со сложными вычислениями.
эмммм, что?
Что пишешь this, что нет,
всё равно всё будет через this делаться, просто неявно...
1
ThePlague
101 / 101 / 61
Регистрация: 30.06.2015
Сообщений: 272
29.01.2016, 11:19 #3
Некий_Чел, Указатель this - как и когда его использовать
0
rikimaru2013
C++ Game Dev
2439 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
29.01.2016, 11:27 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Проверяйте c this и без http://bit.ly/1SfhkOH

Насчёт this - то статические анализаторы с++ не любят его и программисты заменяют this на T& self();
1
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,355
Записей в блоге: 2
Завершенные тесты: 1
29.01.2016, 11:42 #5
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Насчёт this - то статические анализаторы с++ не любят его
Можно по-подробней?
0
rikimaru2013
C++ Game Dev
2439 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
29.01.2016, 13:31 #6
Цитата Сообщение от Kastaneda Посмотреть сообщение
Можно по-подробней?
C++
1
2
3
4
Foo::Foo : m_hello(this)
{
 
}
Using this in initialization list bla-bla-bla
2
gromo
371 / 270 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
29.01.2016, 14:25 #7
rikimaru2013, а где ж такое может понадобиться-то?
0
rikimaru2013
C++ Game Dev
2439 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
29.01.2016, 14:31 #8
gromo, класс-член в композиции нужнается в ссылке на интерфейс, который реализует его родитель.
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,355
Записей в блоге: 2
Завершенные тесты: 1
29.01.2016, 14:32 #9
rikimaru2013, вообще да, обходить такую задачу через self() не самый лучший вариант, просто потому что объект еще не сконструирован и конструктор мембера будет работать с еще не созданным объектом. Другое дело, что может быть необходимо тупо хранить указатель владельца, тогда да.
0
rikimaru2013
C++ Game Dev
2439 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
29.01.2016, 14:35 #10
Kastaneda,
я описал реальный случай с жизни) Никто не будет вызывать вирт методы в конструкторе, но передача ссылки на самого себя как класса реализующего нужный интерфейс весьма валидная ситуация. На self не ругнётся с this даст варнинг/еррор в зависимости от уровня
0
gromo
371 / 270 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
29.01.2016, 14:36 #11
rikimaru2013, можно название идиомы или подробнее объяснить? Что-то не догоняю что за класс-член
0
rikimaru2013
C++ Game Dev
2439 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
29.01.2016, 14:40 #12
gromo, God class

А если серьйозно, то ощущение, что вы стебётесь и не очень хочется повторять 10 пост и приводить пример ((
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,355
Записей в блоге: 2
Завершенные тесты: 1
29.01.2016, 14:46 #13
Цитата Сообщение от Kastaneda Посмотреть сообщение
вообще да, обходить такую задачу через self() не самый лучший вариант
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
я описал реальный случай с жизни)
я сам же покритиковал и сам же вспомнил, что в коде, с которым сейчас работаю, полным полно именно этого, и написал это я
Только у меня немного по-другому, вот так

C++
1
2
3
4
class MyClass
{
    MyAnotherClass object = { this };
};
но суть та же.
0
gromo
371 / 270 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
29.01.2016, 14:47 #14
rikimaru2013, не стебусь, просто у вас объяснения слишком концентрированные. Ну да ладно, не могу пока представить себе ситуации, где потребовалось бы что-то подобное, поэтому, можно сделать предположение, что это не так уж и нужно.
0
Kastaneda
29.01.2016, 14:47     Стоит ли избегать указателя this?
  #15

Не по теме:

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
серьйозно
cyberforum же ошибки подчеркивает в поле ввода сообщения

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2016, 14:47
Привет! Вот еще темы с ответами:

Низкоуровневость в c++. Стоит или не стоит его учить? - C++
Приветствую! Захотел выучить язык c++, но знакомый сказал, что у него есть стремление к низкоуровневости! Подскажите пожалуйста, можно...

Перезаписать память начиная с указателя Bitmap[1] элементами начиная с указателя Bitmap[0] - C++
Задан массив из 3 указателей Bitmap, по адресу Bitmap необходимо записать 480*640 элементов из массива Bitmap. В последнем цикле for выдает...

Как избегать конфликтов записи? - VBA
В форме при попытке, в зависимости от условия одного из полей, обновить значения базовой таблицы этой форме постоянно возникает сообщение о...

Избегать попадания на пустые элементы массива - C#
Привет, есть такой массив string side_ = new string { new string { " ", " ", " ", " ",...


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

Или воспользуйтесь поиском по форуму:
15
29.01.2016, 14:47
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru