Когда использовать shared_ptr и когда использовать raw pointers?

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 следует использовать только в случае явной передачи или разделения прав собственности, что, как мне кажется, происходит довольно редко, за исключением случаев, когда функция выделяет некоторую память, заполняет ее некоторыми данными и возвращает их, и между вызывающей и вызываемой сторонами есть понимание, что первая теперь "отвечает" за эти данные.

73
задан TripShock 5 October 2011 в 06:56
поделиться