在 C++11 上找不到太多,但只能在 boost 上找到。
考虑以下类:
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深度复制到我自己的this->_graph副本中。
上面的方法是正确的方法吗?
此外,如果 g 抛出异常, f(shared_ptr(new int(42)), g()) 可能会导致内存泄漏。如果使用 make_shared 则不存在此问题。
有没有其他方法可以解决这个问题,更安全或更可靠?