c++,我应该调用destructor吗?

问题描述 投票:0回答:1

在C++中,我有一个类,它是通过使用 new[] 所以我把destructor写成了下面的样子。

Matrix::~Matrix() {
    delete[] data;
}

我的 Matrix 类中包含的字段称为 complex 属于 Complex 我写的。

我的问题是,我是否应该调用我写的 complex 也是,怎么做?

c++ class destructor
1个回答
2
投票

不,外类的析构器调用内部数据成员的析构器。

如果你编译并运行下面的代码,你会发现,外类的析构函数调用了内部数据成员的析构函数。A,内部数据成员的类被调用,尽管它没有在 B 破坏者

#include <iostream>
struct A{
    ~A(){
        std::cout << "A des\n";
    }
};
struct B{
    A a;
    ~B(){
        std::cout << "B des\n";
    }
};
int main(){
    B b;
}

B des
A des

0
投票

我的问题是,我是否也应该调用复杂体的析构函数,如何调用?

不,你不需要调用destructor。这就是 newdelete;他们调用constructorsdestructors。


说了这么多,考虑到你似乎是C++的新手,强烈建议你使用 std::vector<Complex>std::unique_ptr<Complex[]> 而不是原始指针。一些原因是。

  • 不太容易漏掉双倍自由;所有权很明显。
  • 如果你忘记添加复制构造函数,不会对指针做错误的 "浅层 "复制。
  • 你不必担心 deletedelete[] 不匹配。
  • vector 可以更容易地调整大小复制。
  • 总的来说提供一个更容易使用、更难滥用、更封装的接口。
© www.soinside.com 2019 - 2024. All rights reserved.