我正在尝试调试以下代码:
#include <iostream>
class wine
{
public:
//wines name/brand
char *name;
//wines age
int age;
//in liters
long double volume;
//def construct
wine();
//construct
wine(char *name, int age, long double volume) : name(name), age(age), volume(volume) {};
//destruckt
~wine();
};
wine::wine() {}
wine::~wine()
{
delete &name;
delete &age;
delete &volume;
}
int main()
{
char a[5] = { 'G','a','l','l','o' };
wine old(a, 50, 1);
for(int i = 0; i < 5; i++)
{
std::cout << a[i];
}
while (!std::cin.ignore());
delete &old;
return 1;
}
我在调试时观察到的是,析构函数是错误,但我还没有实现其他目的
您不对new
做任何动态内存分配,因此也不需要delete
。拆下delete &old;
。当old
超出范围时(在main
函数的末尾),将自动调用析构函数。
以及调试时我观察到的是destruct函数是错误
是的。您的wine
类不包含任何动态分配的内容,因此不需要使用delete
进行删除。但是您的析构函数会尝试删除其成员变量。
删除析构函数中的那些delete
调用。如果需要,您可以从整体上消除析构函数(这样wine
剩下没有任何特殊功能的默认析构函数)。