适当使用shared_ptr吗?
|
没有使用ѭ0的经验,我想知道以下内容是否合适,并且将ѭ0返回给用户是否是个好主意。
我有一个像图的结构,在节点之间有多个连接。在遍历图形期间,每个节点都被分配了一个值(从连接的节点计算),我希望用户能够轻松访问该值。整个过程看起来像这样(强烈简化):
class Pool;
class Node {
public:
typedef std::tr1::shared_ptr<Node> Ptr;
...
void compute_dependencies() {
...
// calls Pool to get a new Node instance
dependencies_.push_back(Pool::create_node(...));
...
}
// evaluate the current node
void evaluate() { /* use dependencies_ */ };
double value() const { if(evaluated) return value_; };
private:
std::vector<Node::Ptr> dependencies_; // vector<Node*> better?
dbl value_;
}
// Pool creates and owns all nodes
class Pool {
public:
static const Node::Ptr create_node(...); // create a new node
void traverse_and_evaluate();
private:
std::vector<Node::Ptr> allnodes; // appropriately sorted to ensure
// dependencies are evaluated
...
}
然后用户致电:
Pool pool();
Node::Ptr node1 = Pool::create_node(...);
Node::Ptr node2 = Pool::create_node(...);
....
pool.traverse_and_evaluate();
// ready to read out the now populated values
cout << node1->value() << \" \" << node2->value() << ...
这样做的好处是,用户可以直接访问他关心的节点(依赖性通常是无趣的)。但是我不确定100%是否是个好主意。
感谢您的输入!
编辑:没有循环依赖项。
没有找到相关结果
已邀请:
2 个回复
钾涎净介
主要用于对象没有明确所有者(或可能需要使所有者失去生存期)的情况,因此没有明显的销毁对象的位置。
本质上成为所有者,并且当最后一个
超出范围时,该对象也将被销毁。 当您拥有明确的所有者(例如
类),并且不需要
对象超过拥有的
时,那么确实就不需要
。您可以在所有者的析构函数中销毁对象。
谷起