当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《析构函数C++:输入'***'参数给'删除',预期指针》经验,为你挑选了2个好方法。

我声明了一个私有变量

vector theVector;

我的SomeClass类中的某个地方.

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

编译错误说:

 type `class Vector' argument given to `delete', expected pointer 

什么预期指针?



1> Martin York..:

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

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

int main()
{
    vector theVector;

    vector* ptrVctor = new vector();


    delete ptrVctor;   // ptrVctor must be deleted manually
    // theVector destroyed automatically here
}



2> paxdiablo..:

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

vector theVector;

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

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

vector *theVectorPtr = new vector();

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

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

delete theVectorPtr;

你代码中的某个地方.

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

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有