【发布时间】:2018-11-26 18:56:20
【问题描述】:
我对 c++ 很陌生,我有一个问题。
如果我有一个包含(指向一个)向量的类:
class myClass {
public:
int* direction;
myClass(int d){direction=new int[d];}
}
当我创建一个对象并在 main 中删除它时:
int main(){
int d;
myClass* myvec;
myvec = new myClass(d);
delete myvec;
}
myvec->direction 的析构函数也被连贯地调用并释放了内存?还是我必须为此编写一个合适的方法?
我希望问题很清楚......
【问题讨论】:
-
您没有包含向量的类。您有一个包含指针的类。使用
std::vector,就可以了。或者,std::unique_ptr如果您关心向量内存开销。 -
删除一个对象意味着破坏它的成员。对于一个不包含
delete指向的原始指针(vectorpointer 已销毁,但这不同于调用delete vector;)。尽可能避免使用原始欠指针(您需要记住delete的指针),而根据情况使用智能指针(如std::unique_ptr)或标准容器(如std::vector)。 -
我没有投反对票。请记住,问题的目的是帮助未来的读者解决同样的问题。 StackOverflow 不是论坛。 3 人投票说这个问题不是一个好的教具。
-
@Thomas 1) 经验法则是:
delete你是什么new(除了delete[]你是什么new[]),避免使用new必要的。 2)如果你是初学者,你应该向good C++ book学习,而不是随机编码。 -
那就是
std::vector<int> vector;。注意:我建议不要使用vector作为您的成员的名称,因为它也是标准类型的名称。它可能会使代码在阅读、推理和讨论时产生不必要的混乱。
标签: c++ memory-management