我声明了一个私有变量
vectortheVector;
我的SomeClass类中的某个地方.
为什么我不能说:delete theVector
在我的SomeClass析构函数里面?
编译错误说:
type `class Vector' argument given to `delete', expected pointer
什么预期指针?
如果新的和删除齐头并进.
删除你需要通过new创建它的东西(它给你一个指针).然后,您可以删除指针.您声明向量的方式是在堆栈(而不是堆)上创建它,并且当它超出范围时将被释放.
int main() { vectortheVector; vector * ptrVctor = new vector (); delete ptrVctor; // ptrVctor must be deleted manually // theVector destroyed automatically here }
在C++中(与Java不同),您可以在堆栈或堆上创建对象.正如您所做的那样,在堆栈上创建它的示例如下:
vectortheVector;
当堆栈帧消失时(通常从创建对象的函数返回时),此对象超出范围.
在堆上创建对象允许它们比创建它们的函数寿命更长,并且通过执行以下操作来实现:
vector*theVectorPtr = new vector ();
然后,您可以将theVectorPtr
指针传递回函数的调用者(或者将其全局存储,无论您想要什么).
为了摆脱堆上的对象,你明确地删除它:
delete theVectorPtr;
你代码中的某个地方.
删除堆上的对象会终止该对象的范围,从函数返回的方式也会结束在堆栈上创建的变量的范围.