Mel*_*maz 2 c++ tree vector shared-ptr
我正在用 C++ 做学校作业(我还在学习)。我正在尝试实现随机生成的二叉树结构,使用 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;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我初始化了一个根,并且我想保持树的每个其他节点为空,直到我在树结构中选择它为止。在我的作业中,我会在将它推送到向量树队列中后决定要选择哪个节点。(我从那里随机挑选)。
问题:例如,在上面的代码中,当我初始化 treeQueue[1] 时,我希望 root->right 也被初始化。因为它们是相同的指针。但它仍然是空的!我还将尝试将其推送到 treeQueue 中的替代方法(这也不起作用)。我也试过“enable_shared_from_this”,这就是它在那里的原因。
有没有办法做到这一点?或者是否有另一种技术可以提供我需要的相同功能?
我了解到使用原始指针是不健康的,所以我使用了 shared_ptr,这是有道理的,但现在我遇到了这个问题。请帮助我,我会失去理智。我到处寻找。我尝试了我发现的一切。
shared_ptr分享ptr指向的内容。在shared_ptr以任何方式,形状,物质,或形式本身是不是“共享”。每个shared_ptr引用相同对象(被共享)的对象都是它自己的、独立的、离散的共享指针。
在这里,您将一个复制shared_ptr到另一个shared_ptr。然后,您将 a 的副本替换为shared_ptr另一个新构建的shared_ptr.
那个新构建的shared_ptr与shared_ptr第一个复制的原始文件无关。
您的代码等效于以下内容:
int *a=NULL;
int *b=a;
b=new int{4};
Run Code Online (Sandbox Code Playgroud)
你现在期望*a返回4吗?。当然不是。它们是两个完全不同的指针。
| 归档时间: |
|
| 查看次数: |
687 次 |
| 最近记录: |