沒有shared_ptr<>
的使用經驗我想知道以下是否是適當的用例,以及是否將shared_ptr<>
返回給用戶是一個好主意。適當使用shared_ptr?
我有一個像節點之間有多個連接的結構圖。遍歷圖時,每個節點都被分配一個值(從連接節點計算),我希望用戶能夠輕鬆訪問該值。整體看起來(非常簡化的)是這樣的:
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%確定這是否是一個好主意。
感謝您的輸入!
編輯:沒有循環依賴關係。
你可能會發現這個問題和答案有點相關:http://stackoverflow.com/questions/5629592/resource-leak-during-object-creation-c/ – Anton 2011-04-15 03:05:12