如何在析构函数中删除?

How to delete in destructor?

我在析构函数中调用了 delete,但它说:undentifier "data" 未定义!不应该删除析构函数中的工作吗?

struct Coada
    {
        Coada(int size_max=0)
        {
            int prim = -1;
            int ultim = -1;
            int *data = new int[size_max];
        }

        ~Coada()
        {
            delete[] data;
        }


    };

要删除指针,指针的值必须存储到删除点。由于指针data只存在于构造函数returns之前,并且没有对指针值进行复制,因此在构造函数returns之后指针不能被删除。由于在此之前没有删除,分配的内存将泄漏。

此外,不能在其范围之外访问变量。 data 是构造函数的局部变量,不能在该函数之外访问。析构函数中没有变量data;因此你的编译器出错了。

因此,如果您确实在函数中分配了某些内容,并且不希望在该函数中取消分配它,则必须将指针存储在某个地方。由于您分配的函数是构造函数,因此将指针存储在成员变量中是很自然的。析构函数可以访问成员变量,因此可以删除指针。

但是,请记住,C++ 程序员极少需要进行手动内存管理。应尽可能避免。例如,在这种情况下,使用 std::vector 分配一个动态大小的数组会很聪明。

别人说的都是对的,你要照做。
回答你的问题。是的,如果你做对了,删除应该在析构函数中工作。这是一个如何工作的例子:

struct Coada{

        Coada(int size_max=0){
            int prim = -1;
            int ultim = -1;
            data = new int[size_max];
        }

        ~Coada(){
            delete[] data;
        }

    private:
        int* data;
    };

你可以看到我将 data 声明为 struct Coada 的成员变量,这样我就可以在这个结构的任何地方访问它,也可以在析构函数中访问它。

但是您将在一本优秀的 C++ 书中学到所有这些。

阅读愉快:)

这应该可以为您的对象使用 class :

class Coada {
private:
    int prim;
    int ultim;
    int *data;

public:
    Coada(int size_max=0)
    {
        this->prim = -1;
        this->ultim = -1;
        this->data = new int[size_max];
    }

    ~Coada()
    {
        delete[] this->data;
    }
};

int main(void)
{
    Coada my_coada(4);
    return 0;
}