为什么在程序结束时不调用我的析构函数?

问题描述

我正在尝试了解共享指针如何工作。这是我的循环依赖示例。

我想知道为什么在程序结束时不将其称为析构函数?问题是因为它们链接在一起并且无法退出导致调用析构函数的循环吗?

这是我的代码,所以请看一下。

预先感谢

#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; 
    
    Node(string x) : name(x) { cout << "C" << name << endl; }
    ~Node() { cout << "D" << 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; 

        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;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...