Невозможно найти многого для С++ 11, но только для повышения.
Рассмотрим следующий класс:
class State
{
std::shared_ptr<Graph> _graph;
public:
State( const State & state )
{
// This is assignment, and thus points to same object
this->_graph = std::make_shared<Graph>( state._graph );
// Deep copy state._graph to this->_graph ?
this->_graph = std::shared_ptr<Graph>( new Graph( *( state._graph.get() ) ) );
// Or use make_shared?
this->_graph = std::make_shared<Graph>( Graph( *( state._graph.get() ) ) );
}
};
Предположим, что класс Graph имеет конструктор копирования:
Graph( const Graph & graph )
Я не хочу, чтобы this → _ graph указывал/делил один и тот же объект! Вместо этого я хочу this → _ graph глубоко скопировать объект из state._graph в мой собственный этот → график.. p >
Является ли путь выше правильного пути для этого?
Документация std:: make_shared отмечает, что:
Кроме того, f (shared_ptr (new int (42)), g()) может привести к утечке памяти если g выбрасывает исключение. Эта проблема не существует, если make_shared б.
Есть ли другой способ сделать это, безопаснее или надежнее?