如何在Cpp程序中调试销毁功能

问题描述 投票:-1回答:1

代码

我正在尝试调试以下代码:

#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;
}

我在调试时观察到的是,析构函数是错误,但我还没有实现其他目的

c++ destructor
1个回答
2
投票

您不对new做任何动态内存分配,因此也不需要delete。拆下delete &old;。当old超出范围时(在main函数的末尾),将自动调用析构函数。

以及调试时我观察到的是destruct函数是错误

是的。您的wine类不包含任何动态分配的内容,因此不需要使用delete进行删除。但是您的析构函数会尝试删除其成员变量。

删除析构函数中的那些delete调用。如果需要,您可以从整体上消除析构函数(这样wine剩下没有任何特殊功能的默认析构函数)。

© www.soinside.com 2019 - 2024. All rights reserved.