首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >摧毁向量向量

摧毁向量向量
EN

Stack Overflow用户
提问于 2018-01-24 03:10:03
回答 2查看 610关注 0票数 1

我正在处理一个矩阵类,它是用向量实现的,如下所示:

代码语言:javascript
复制
class Matrix {
    private:
        int r, c;
        std::vector<std::vector<double> > grid;
    public:
        //things

目前我正在实现析构函数,并对其进行了考虑。在我(聪明地)切换到std::vector之前,我使用的是double ** grid。这意味着有一些new调用,因为每个指针都指向一个数组(这也是我遇到的believe...or错误提示的指针.)。无论如何,析构函数看起来是这样的:

代码语言:javascript
复制
Matrix::~Matrix() {
    for (int i = 0; i < r; i++) {
        delete [] grid[i]
    delete [] grid

现在我正试图复制(也许是不必要的?)并有以下内容:

代码语言:javascript
复制
Matrix::~Matrix() {
    std::vector<std::vector<double> >::iterator it = this->grid.begin();
    for (it; it != this->grid.end(); it++) {
       (*it).clear()
    this->grid.clear();
    std::vector<std::vector<double> >().swap(this->grid);

代码语言:javascript
复制
Matrix::~Matrix() {
    this->grid.clear();
    std::vector<std::vector<double> >().swap(this->grid);

我倾向于使用后者,因为clear()应该完全销毁内部向量(不仅仅是内部向量的内容),然后是临时向量的复制和交换习语效应,以释放原始外部向量的内存。前者使我认为我clear()每个内部向量的内容,但留下n个空的、仍在内存中的向量,并不得不调用每个向量的临时交换机制(因此可能会对迭代器产生影响)。

调用外部向量上的clear()是否通过调用其析构函数完全释放用于内部向量的内存?我不确定他们的析构函数是否以交换成语那样的方式释放。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-26 10:27:14

注意,这个破坏者比你想象的要复杂。我们开始:

代码语言:javascript
复制

好吧,实际上,不是。您可以感谢零规则提供了这个灵活的实现。由于std::vector是一个行为良好的类(模板),它通过雷伊正确地管理其资源,因此您的类的默认生成析构函数可以在不键入任何内容的情况下执行正确的™操作。

如果出于任何原因,仍然需要该析构函数的显式签名,则可以在类中使用以下语法:

代码语言:javascript
复制
~Matrix() = default;

或者,如果您需要定义偏离线,通常声明析构函数,但定义它:

代码语言:javascript
复制
Matrix::~Matrix() = default;
票数 5
EN

Stack Overflow用户

发布于 2018-01-24 03:53:49

您不需要编写显式析构函数。当你超出这个2D向量定义的范围时,默认的析构函数序列将处理销毁部分。二维向量中的每个元素都是一维向量,一维向量中的每个元素都是double,因此默认的破坏序列将首先破坏网格,然后再破坏存储在网格中的每个double元素,然后再对grid1等进行重复。

代码语言:javascript
复制
                                       _____  
             _____ grid[0] of doubles |_|_|_|....
            |_____ grid[1] of double
    grid--> |_____ grid[2] of double
            |_____ grid[3] of double
            |_____ grid[4] of double
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48414225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档