删除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 you
new
(除了
delete[]
what you
new[]
),避免在不必要的地方使用
new
。2) 如果你是初学者,你应该从a学习,而不是随机编码。注意:我建议不要使用
vector
作为成员名称,因为它也是标准类型的名称。这可能会使代码在阅读、推理和讨论时产生不必要的混乱。
class myClass {
      int* direction;
public:
      myClass(int d) : direction(new int[d]) {}
      ~myClass() {
          delete[] direction;
      }
}