Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > std::auto_ptr: Как обращятся к методам класса?


Автор: Alca 27.2.2009, 15:51
Код

AnsiString asStr;
std::auto_ptr<TStringList> apSL(new TStringList());
asStr = apSL.get()->Text;    //так?
asStr = apSL->Text;            //или так?

Как правильно обращятся к методам класса?
P.S. Провтыкал раздел.

Автор: mrbrooks 27.2.2009, 15:58
в твоем случае так
Цитата(Alca @  27.2.2009,  15:51 Найти цитируемый пост)
asStr = apSL->Text;   


Добавлено через 1 минуту и 17 секунд
метод get() возвращает прямую ссылку на область памяти, которой владеет указатель. В твоем случае в этом обходимости нет.

Автор: Alca 27.2.2009, 16:01
Есть ли какая-то разница?

Автор: mrbrooks 27.2.2009, 16:04
Цитата(Alca @  27.2.2009,  16:01 Найти цитируемый пост)
Есть ли какая-то разница? 

Ну если ты точно уверен, что вызвав метод get, ничто не освободит область памяти указателя, то на мой взгляд нет.

Автор: Torsten 27.2.2009, 16:58
Без разницы, в любом случае ты делаешь одно и тоже действие.
get() обычно используют, чтобы получить указатель и использовать его как-то по другому. Для того чтобы вызвать метод, обычн, все юзают ->.

Код

AnsiString asStr, *pStr;
std::auto_ptr<TStringList> apSL(new TStringList());
pStr = apSL.get();

asStr= pStr->Text;
asStr = apSL->Text;      

Автор: Lazin 27.2.2009, 17:17
Цитата(Alca @  27.2.2009,  16:01 Найти цитируемый пост)
Есть ли какая-то разница? 

нет, вызов 
Код

operator->()
 смарт-поинтера инлайнится оптимизатором, а поскольку он просто возвращает указатель, то результирующий код не будет отличаться от вызова метода через обычный указатель

Автор: 0xDX 1.3.2009, 08:42
Если компиленр оптимизировал 
Цитата

смарт-поинтера инлайнится оптимизатором, а поскольку он просто возвращает указатель, то результирующий код не будет отличаться от вызова метода через обычный указатель 


ТО и функцию get() оптимизирует в данном случае.(исключительные ситуации если эти два прикола фиртуальные или компилятор затупил)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)