gpt4 book ai didi

c++ - 为什么我的 weak_ptr 出现段错误

转载 作者:行者123 更新时间:2023-12-01 15:12:25 25 4
gpt4 key购买 nike

我正在做一个练习来了解共享指针和弱指针。
所以这个例子是shared_ptr的循环依赖,我该如何解决weak_ptr的问题。
我想将 root->left->parent 初始化为 root,对于右节点也是如此,但它给了我段错误。
有人知道这个问题,我应该如何编写和初始化它?
这是我的代码。
只是要知道,我的第一个练习是只使用共享指针来完成这一切,但之后将父级更改为weak_ptr,这就是为什么有注释行
提前致谢

#include <iostream>
#include <memory>
#include <string>

using namespace std;

struct Node {
string name;
shared_ptr<Node> left = nullptr;
shared_ptr<Node> right = nullptr;
// shared_ptr<Node> parent=nullptr;
weak_ptr<Node> parent;

Node(string x) : name(x) { cout << "Constructor" << name << endl; }
~Node() { cout << "Destructor " << name << endl; }

string toString() {
string lStr{ "<none>" }, rStr{ "<none>" }, pStr{ "<none>" };

if (left != nullptr) lStr = left->toString();
if (right != nullptr) rStr = right->toString();

// if (parent != nullptr) pStr = parent->name;
pStr = parent.lock()->name;

string res;
res += "{Me:" + name + " ";
res += "Parent:" + pStr + " ";
res += "Left:" + lStr + " ";
res += "Right:" + rStr + "}";
return res;
}

};


shared_ptr<Node> foo() {
shared_ptr<Node> root = make_shared<Node>("rootname");
root->left = make_shared<Node>("leftname");
root->right = make_shared<Node>("rightname");

root->left->parent = {root};
root->right->parent ={root};

return root;
}

int main()
{
shared_ptr<Node> k = foo();
cout << k->toString() << endl;
return 0;
}

最佳答案

//      if (parent != nullptr) pStr = parent->name; 
pStr = parent.lock()->name;
应该
    if (auto parentPtr = parent.lock()) pStr = parentPtr->name; 
parent.lock()可能返回 null std::shared_ptr .

关于c++ - 为什么我的 weak_ptr 出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63411813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com