我刚接触c ++,并且有一个问题。
如果我有一个包含(指向a的)向量的类:
class myClass {
public:
int* direction;
myClass(int d){direction=new int[d];}
}
当我创建一个对象并将其删除时,将其删除:
int main(){
int d;
myClass* myvec;
myvec = new myClass(d);
delete myvec;
}
myvec-> direction的析构函数也已被一致调用并释放了内存?还是我必须为此编写一个合适的方法?
我希望问题清楚...
答案 0 :(得分:4)
如果您使用new
分配了内存,则也需要delete
,如下所示:
class myClass {
int* direction;
public:
myClass(int d) : direction(new int[d]) {}
~myClass() {
delete[] direction;
}
}
但是您还需要编写一个复制构造函数和复制赋值运算符,并且在C ++ 11及更高版本中还需要一个移动构造函数和移动赋值运算符,以使其正常工作。否则,当您使用此类的实例时,您将冒险使用默认版本来复制原始指针。
看看the rule of three/five/zero。
使用std::vector<int>
代替原始指针会更好。