C ++:为什么可以在不事先使用new的情况下在结构指针上使用delete?

时间:2018-06-30 00:19:14

标签: c++ struct binary-tree delete-operator

我对C ++还是比较陌生,试图弄清楚如何正确删除结构。我了解到delete运算符仅应用于使用new运算符创建的指针。

但是,在结构的上下文中,尤其是在二叉树中使用时,我现在经常看到类似的东西:

struct test_structure {
    int test_content;
}; 
test_structure *test_realization;
// Some code  
delete test_realization;

即使没有使用新的运算符来创建test_realization,我也不太明白为什么这样做还可以。还是我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

看起来您对术语“使用new运算符创建”感到困惑。所以当你写:

 test_structure *test_realization = new test_structure;

您没有使用运算符new创建test_realization本身,而是创建了一个对象,将其指针返回并分配给test_realization。以后可以由运算符delete销毁此类对象。 test_realization是一个变量,它具有指向test_structure的类型指针,并且像其他任何变量一样,它可以包含不同的值,可以在定义时进行初始化,但可以不进行初始化。因此,当有人说指针“使用new运算符创建”时,他的意思是将值分配给test_realization而不是变量test_realization本身。

 test_structure *test_realization;
 ...
 test_realization = new test_structure; // now test_realization points to object that created by new
 test_realization->test_content = 123; // we can use that object
 ...
 delete test_realization; // now object, which was created by new destroyed and memory released

尽管定义并始终初始化变量是一个好主意,但这不是必需的。