首页 > 解决方案 > 释放与 C++ 中的结构关联的所有内存

问题描述

我有一个结构,其中包含一些向量,定义如下:

#include <vector>
using namespace std;

struct data{
    vector<float> x;
    vector<float> y;
    vector<float> z;
}

我后来这样使用:

data d;
for(int i; i<3; i++){
    d.x.push_back(i)
    d.y.push_back(i*2)
    d.z.push_back(i*3)
}

现在我想以data一种完全释放与其关联的所有内存的方式安全地删除。我认为这样做的方法是编写一个简单的析构函数来清除和释放 的每个字段data,然后delete是对象:

struct data{
    vector<float> x;
    vector<float> y;
    vector<float> z;

    ~data(){
        vector<tempObject>().swap(x);
        vector<tempObject>().swap(y);
        vector<tempObject>().swap(z);
    }
}

然后这应该工作:

data d;
    for(int i; i<3; i++){
        d.x.push_back(i)
        d.y.push_back(i*2)
        d.z.push_back(i*3)
    }
delete data;

我在这里使用了最佳答案释放向量。

这行得通吗?如果不是,您能否描述原因和/或提出替代方案?我知道一旦d离开范围,内存将被释放,但我需要在此之前释放内存。

标签: c++vectormemory-managementstruct

解决方案


现在我想以一种完全释放与之相关的所有内存的方式安全地删除数据。

在 C++ 中有具有自动、静态和动态存储持续时间的变量。您在示例中和静态的自动存储持续时间的生命周期由编译器控制,因此您无法更改它们的生命周期(小例外是通过引用延长右值,但这与此处无关)。如果您需要手动控制生命周期,则需要创建一个具有动态存储持续时间的变量:

auto d = std::make_unique<data>();
d->x.push_back(1.0);
...
d.reset(); // terminate of lifetime of variable pointed by d manually

推荐阅读