我正在用C++做一個學校作業(我還在學習)。我試圖實現隨機生成的二叉樹結構,使用shared_ptr在多個地方存儲節點的信息(我需要作業)。考慮下面的示例代碼(這是我的小測試程序):C++:shared_ptr在向量中沒有更新原始的shared_ptr
#include <vector>
#include <memory>
struct Node : public std::enable_shared_from_this<Node> {
char charValue;
int intValue;
std::shared_ptr<Node > left;
std::shared_ptr<Node > right;
std::shared_ptr<Node > parent;
std::shared_ptr<Node> getPtr()
{
return shared_from_this();
}
Node() : intValue(0)
{
charValue = 0;
}
};
int main(int argc, char**argv) {
std::vector<std::shared_ptr<Node>> treeQueue;
std::shared_ptr<Node> root = std::make_shared<Node>();
treeQueue.clear();
treeQueue.push_back(root->left); //std::shared_ptr<Node>(root->left)); //root->left->getPtr());
treeQueue.push_back(root->right); //std::shared_ptr<Node>(root->right)); //root->right->getPtr());
treeQueue[1] = std::make_shared<Node>(); //std::shared_ptr<Node>(new Node);
system("PAUSE");
return 0;
}
在這種情況下,我intialize的根,我想保持樹的所有其他節點空的,直到我在樹結構中選擇它。在我的作業中,我決定在矢量treeQueue中將它推向哪個節點。 (我從那裏隨機挑選它)。
問題:例如,在上面的代碼中,當我初始化treeQueue [1]時,我期望root-> right也被初始化。因爲他們是相同的指針。但它保持空虛!我還提出了其他方法,我嘗試在treeQueue中推送它(這也不起作用)。我也嘗試過「enable_shared_from_this」,這就是爲什麼它在那裏。
有沒有辦法做到這一點?還是有另一種技術可以提供我需要的相同功能?
我知道使用原始指針並不健康,所以我使用了shared_ptr,這有道理,但現在我得到了這個問題。請幫助我,我會失去理智。我可以到處搜索。我嘗試了我發現的一切。
爲什麼期待'root-> right'被初始化?你沒有在任何地方初始化它。 – lcs
'treeQueue [1] = std :: make_shared()'不影響'root-> right',你只需要用一個新值刪除一個空的'shared_ptr'(拷貝'root-> right')。你可能需要'std :: vector *>'... –
Jarod42
我不明白你的問題。你想達到什麼目的? – Barry