我的编程背景是 Java 世界,但我刚刚开始学习 C++。作为一名 Java 程序员,我偶然发现了这个相当微不足道且可能相当愚蠢的问题,这让我感到困惑:
我有一个带有数组的类,该数组通过构造函数中的 new 初始化并在析构函数中删除。现在,当我创建这个类的一个对象并将这个类的另一个对象分配给同一个变量时(至少我认为是这样),当变量离开时,析构函数中的 delete[] 方法似乎被调用了两次范围(在本例中为 main() 函数)(调试器给我一个 _BLOCK_TYPE_IS_VALID 断言失败警告)。
这是为什么?为什么在我将新对象分配给 f 之前不调用解构函数?我怎么能明确地删除 Foo(1)?这里到底发生了什么?
class Foo{
private:
int *field;
public:
Foo(int size){
field = new int[size];
}
~Foo(){
delete[] field;
}
};
int main(){
Foo f = Foo(1);
f = Foo(2);
}