class B;
class A
{
public:
A ()
: m_b(new B())
{
}
shared_ptr<B> GimmeB ()
{
return m_b;
}
private:
shared_ptr<B> m_b;
};
Допустим, B - это класс, который семантически не должен существовать вне времени жизни A, т.е. для B нет абсолютно никакого смысла существовать самому по себе. Должна ли GimmeB
возвращать shared_ptr
или B*
?
Вообще, является ли хорошей практикой полностью избегать использования сырых указателей в коде C++ вместо умных указателей?
Я придерживаюсь мнения, что shared_ptr
следует использовать только в случае явной передачи или разделения прав собственности, что, как мне кажется, происходит довольно редко, за исключением случаев, когда функция выделяет некоторую память, заполняет ее некоторыми данными и возвращает их, и между вызывающей и вызываемой сторонами есть понимание, что первая теперь "отвечает" за эти данные.