2017-01-24 3 views
2

При использовании функции из внешней библиотеки безопасно ли «произвольно» указатели разыменования в ссылках на const?Преобразование указателей в (const) ссылки

SomeType const& obj = *LIB_CreateSomething(); 

Действительно ли это универсально безопасно/умно?
Что еще более важно, действительно ли есть повод сделать это с помощью указателя const, отличного от необработанных указателей, «нахмуренных» на C++?

+0

Проверьте, что указатель сначала не пуст. –

+0

Что вы надеетесь получить, сделав это? –

+0

@MikelF Не знаю, мой вопрос действительно есть * это * основной. – UghSegment

ответ

1

Это, безусловно, не совсем хорошая идея, или вообще хорошая идея вообще. Если функция возвращает указатель, особенно если он вызывает что-то вроде CreateX, есть хороший шанс, что вам нужно управлять временем жизни вещи, на которую указывает указатель. Вы не можете сделать это с помощью ссылки, но вы можете с помощью умного указателя.

В общем, вы не хотите создавать ссылочные переменные. Ссылки на C++ предназначены для использования в основном как параметры функции и возвращаемые значения.

0

Что вы действительно хотите сделать, это что-то вроде следующего (см. Код). Объекты Const инициализируются при создании. Некоторые компиляторы понимают, что вы пытаетесь сделать, и не жалуетесь на эту форму назначения.

 

    SomeType const& obj(*LIB_CreateSomething()); 

Как правило, в C++ вы бы этого не сделали.

Одна из причин заключается в том, что «сырые» (голые) указатели на самом деле нахмурились, когда вы являетесь владельцем. Если это не принадлежит вам, тогда стилистически нет ничего плохого в использовании указателя.

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

Как уже упоминалось в другом комментарии, вы действительно можете быть владельцем, и в этом случае вам следует управлять памятью. Вы не можете сделать это со ссылкой.