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
повернути a shared_ptr<B>
чи a B*
?
Загалом, чи є гарною практикою повністю уникати використання необроблених покажчиків у коді С ++ замість розумних вказівників?
Я вважаю, що shared_ptr
слід використовувати лише тоді, коли є явна передача або розподіл права власності, що, на мою думку, є досить рідкісним випадком, коли функція виділяє деяку пам'ять, заповнює її деякими даними та повертає, і є розуміння між абонентом і абонентом, що перший "відповідає" за ці дані.