c++ - 将 std::shared_ptr 用于 std::vector 时发生内存泄漏

标签 c++ c++11 memory-leaks

我有一个图像类:

class Image{

   public:

    Image()
    {
      vector_ptr = std::make_shared<std::vector<Feature>>(feature_vector);
    }

    std::shared_ptr<std::vector<Feature>> calculate_vector()
    {
      // iterates over a space of possible features, calling
      // vector_ptr->push_back(Feature(type, i, j, w, h, value))

      return vector_ptr;
    }

    std::shared_ptr<std::vector<Feature>> get_vector()
    {
      return vector_ptr;
    }

    void clear_vector()
    {
      vector_ptr->clear();
    }

  private:
    std::vector<Feature> feature_vector;
    std::shared_ptr<std::vector<Feature>> vector_ptr;
};

特征由 :

struct Feature
{
    Feature(int type, int i, int j, int w, int h, double value);
    void print();

    int type;

    int i, j;
    int w, h;

    double value;
};

但是在先后调用calculate_vector(),再调用clear_vector()后,htop提示存在内存泄漏。

如何解决这个问题? (特征向量很大)

最佳答案

vector_ptrfeature_vector 的拷贝,它不是围绕它的共享包装器。因此,如果您想释放其内存,您还需要调用 feature_vector.clear();

关于c++ - 将 std::shared_ptr 用于 std::vector 时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31551671/

相关文章:

c++:将可变数量的输入存储到 Char 缓冲区中

c++ - 转发引用和模板模板

c++ - 将可变参数模板参数解包到初始化列表中

c++ - valgrind 如何以及何时检测内存泄漏

c# - 分离空事件处理程序

c++ - 如何将 eclipse 项目传输到新计算机?

c++ - 使用默认值参数丢弃函数指针上的参数是否有效?

c++ - 如何从基于 C++ 的 COM 对象写入 VB6 即时窗口?

c++ - 如何在 Qt 中使用两个键修饰符设置 3 键序列快捷方式?

c - 内存泄漏......解释(希望)