elhor prática ao retornar ponteiros inteligentes

Qual é a melhor prática ao retornar um ponteiro inteligente, por exemplo, um boost :: shared_ptr? Por padrão, devo retornar o ponteiro inteligente ou o ponteiro bruto subjacente? Como sou do C #, costumo sempre retornar indicadores inteligentes, porque parece certo. Assim (ignorando a const-correção para código mais curto):

class X
{
public:
    boost::shared_ptr<Y> getInternal() {return m_internal;}

private:
    boost::shared_ptr<Y> m_internal;
}

No entanto, vi alguns codificadores experientes retornando o ponteiro bruto e colocando os ponteiros brutos em vetores. Qual é a maneira correta de fazer isso?

questionAnswers(18)

yourAnswerToTheQuestion