【发布时间】:2011-11-28 13:55:35
【问题描述】:
假设我有一个带有两个私有变量的 C++ 类。一个固定大小的数组data,以及一个指向该数组的指针pnt。
class MyClass
{
private:
double *pnt;
double data[2];
public:
myClass();
virtual ~MyClass();
double* getPnt() const;
void setPnt(double* input);
};
MyClass::MyClass()
{
double * input;
data[0] = 1;
data[1] = 2;
input= data;
setPnt(input);
}
MyClass::~MyClass()
{
delete this->pnt; // This throws a runtime error
}
void MyClass::setPnt(double * input)
{
pnt = input;
}
double * MyClass::getPnt() const;
{
return pnt;
}
int main()
{
MyClass spam; // Construct object
delete spam; // Error C2440: 'delete' cannot convert from 'MyClass' to 'void*'
}
这段代码有两个问题。首先,如果我尝试在对象上调用 delete,我会得到:
错误 C2440:“删除”无法从“MyClass”转换为“void*”
其次,如果我注释掉删除语句,我会收到一个实时错误,说明调试断言失败!还有这个:
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
然后我的问题是:对于具有指向私有固定大小数组的指针的类,我如何正确释放内存、写入/调用析构函数?
P.S 我不能使用vector 或类似的漂亮容器(因此提出了这个问题)。
【问题讨论】:
-
这是一个类似的问题,但我们问的是不同的问题,因为我有一个私有静态数组:stackoverflow.com/questions/4748669/…
-
我没有看到静态数组。我看到一个固定大小的数组
标签: c++ debugging pointers destructor