删除c+中的对象+;意味着删除其成员? 我对C++很陌生,我有个问题。
如果我有一个包含向量(指向向量的指针)的类: 当我在主界面中创建并删除对象时:删除c+中的对象+;意味着删除其成员? 我对C++很陌生,我有个问题。,c++,memory-management,C++,Memory Management,如果我有一个包含向量(指向向量的指针)的类: 当我在主界面中创建并删除对象时: int main(){ int d; myClass* myvec; myvec = new myClass(d); delete myvec; } 另外,myvec->direction的析构函数也被一致调用,内存被释放了吗?还是我必须为此写一个合适的方法 我希望问题是清楚的…如果您已使用new分配内存,您也需要删除它,如下所示: class myClass { int
int main(){
int d;
myClass* myvec;
myvec = new myClass(d);
delete myvec;
}
另外,myvec->direction的析构函数也被一致调用,内存被释放了吗?还是我必须为此写一个合适的方法
我希望问题是清楚的…如果您已使用
new
分配内存,您也需要删除它,如下所示:
class myClass {
int* direction;
public:
myClass(int d) : direction(new int[d]) {}
~myClass() {
delete[] direction;
}
}
但是您还需要编写一个复制构造函数和复制赋值操作符,在C++11和更高版本中,还需要编写一个移动构造函数和移动赋值操作符,这样才能正常工作。否则,在使用此类的实例时,您将面临复制原始指针的默认版本的风险
看一看
您最好使用std::vector
而不是原始指针。您没有包含vector的类。您有一个包含指针的类。使用std::vector
,您就会没事了。或者,std::unique_ptr
,如果您关心向量内存开销。删除对象意味着销毁其成员。如果原始指针不包含delete
ing它所指向的内容(vector
指针被销毁,但这与调用delete vector;
不同)。根据具体情况,尽可能避免使用原始指针(需要记住删除的指针),而使用智能指针(如std::unique_ptr
)或标准容器(如std::vector
),我没有投反对票。记住,提问的目的是帮助未来的读者解决同样的问题。StackOverflow不是一个论坛。3个人投票说这个问题不是一个好的教具。@Thomas 1)经验法则是:delete
what younew
(除了delete[]
what younew[]
),避免在不必要的地方使用new
。2) 如果你是初学者,你应该从a学习,而不是随机编码代码>。注意:我建议不要使用vector
作为成员名称,因为它也是标准类型的名称。这可能会使代码在阅读、推理和讨论时产生不必要的混乱。
class myClass {
int* direction;
public:
myClass(int d) : direction(new int[d]) {}
~myClass() {
delete[] direction;
}
}