析构函数C++:输入'***'参数给'删除',预期指针

and*_*and 12 c++ destructor

我声明了一个私有变量

vector<SomeClass> theVector;
Run Code Online (Sandbox Code Playgroud)

我的SomeClass类中的某个地方.

为什么我不能说:delete theVector在我的SomeClass析构函数里面?

编译错误说:

 type `class Vector<SomeClass>' argument given to `delete', expected pointer 
Run Code Online (Sandbox Code Playgroud)

什么预期指针?

Mar*_*ork 19

如果新的和删除齐头并进.

删除你需要通过new创建它的东西(它给你一个指针).然后,您可以删除指针.您声明向量的方式是在堆栈(而不是堆)上创建它,并且当它超出范围时将被释放.

int main()
{
    vector<SomeClass> theVector;

    vector<SomeClass>* ptrVctor = new vector<SomeClass>();


    delete ptrVctor;   // ptrVctor must be deleted manually
    // theVector destroyed automatically here
}
Run Code Online (Sandbox Code Playgroud)


pax*_*blo 8

在C++中(与Java不同),您可以在堆栈或堆上创建对象.正如您所做的那样,在堆栈上创建它的示例如下:

vector<SomeClass> theVector;
Run Code Online (Sandbox Code Playgroud)

当堆栈帧消失时(通常从创建对象的函数返回时),此对象超出范围.

在堆上创建对象允许它们比创建它们的函数寿命更长,并且通过执行以下操作来实现:

vector<SomeClass> *theVectorPtr = new vector<SomeClass>();
Run Code Online (Sandbox Code Playgroud)

然后,您可以将theVectorPtr指针传递回函数的调用者(或者将其全局存储,无论您想要什么).

为了摆脱堆上的对象,你明确地删除它:

delete theVectorPtr;
Run Code Online (Sandbox Code Playgroud)

你代码中的某个地方.

删除堆上的对象会终止该对象的范围,从函数返回的方式也会结束在堆栈上创建的变量的范围.