我对C ++还是比较陌生,试图弄清楚如何正确删除结构。我了解到delete运算符仅应用于使用new运算符创建的指针。
但是,在结构的上下文中,尤其是在二叉树中使用时,我现在经常看到类似的东西:
struct test_structure {
int test_content;
};
test_structure *test_realization;
// Some code
delete test_realization;
即使没有使用新的运算符来创建test_realization,我也不太明白为什么这样做还可以。还是我在这里想念什么?
答案 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
尽管定义并始终初始化变量是一个好主意,但这不是必需的。