删除包含shared_ptr的动态分配对象

时间:2017-02-20 23:32:11

标签: c++ shared-ptr

这个问题是一个非常简单的解决方法,但我仍然对使用shared_ptr缺乏了解。

这是我编写的一些测试代码,用于复制我遇到的问题。

示例1

#include <memory>

class Test
{
  public:
    Test(int * pointer) : _pointer(pointer) {}
    ~Test() {}
  private:
    std::shared_ptr<int> _pointer;
};

int main()
{
  int test_int = 5;
  Test * test_object = new Test(&test_int);
  delete test_object;
  return 0;
}

运行此代码时,Visual Studio调试器会在Test析构函数的末尾触发断点。

我已经知道我需要做什么来解决这个问题。只需使测试构造函数接受shared_ptr,就像这样。

示例2

#include <memory>

class Test
{
  public:
    Test(std::shared_ptr<int> pointer) : _pointer(pointer) {}
    ~Test() {}
  private:
    std::shared_ptr<int> _pointer;
};

int main()
{
  std::shared_ptr<int> test_int = std::make_shared<int>(5);
  Test * test_object = new Test(test_int);
  delete test_object;
  return 0;
}

即使我部分理解了这个问题并知道如何解决这个问题,但我还是不完全理解为什么 Sample 1 中的代码不起作用。我真的只是想找一个对shared_ptr有更多了解的人来为我解决这个问题。

感谢。

0 个答案:

没有答案