dan*_*ucs 0 c++ oop destructor
我有以下代码
#include <bits/stdc++.h>
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
~TreeNode() {
std::cout << "are we in here";
}
};
int main()
{
if(1 < 2) {
TreeNode *testing = new TreeNode(15);
//why is the destructor not called here?
}
TreeNode *root = new TreeNode(15);
root->left = new TreeNode(10);
root->right = new TreeNode(20);
root->left->left = new TreeNode(8);
root->left->right = new TreeNode(12);
root->right->left = new TreeNode (16);
root->right->right = new TreeNode(25);
//why is the destructor not being called here?
}
Run Code Online (Sandbox Code Playgroud)
在这两条评论中,我想知道为什么析构函数没有被调用?如果我没记错的话,当对象超出范围时,应该调用析构函数。然而,当指针超出 if 语句的范围以及 main 完成时,TreeNode 析构函数永远不会被调用
小智 5
C++ 的黄金法则之一是,如果您使用new某些东西,您也应该使用delete它。当您使用 时new,您是在告诉编译器您现在负责管理该变量的生命周期。
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |