【问题标题】:question about smart pointers关于智能指针的问题
【发布时间】:2010-06-15 04:31:11
【问题描述】:

我有这个代码的 sn-p,我必须用 A 类(构造函数、析构函数、复制构造函数、运算符 =)编写适当的代码,我的问题是,如果我希望这段代码可以工作,我是否需要编写智能指针完美,如果没有,你能解释一下写智能指针在哪里有用吗,提前谢谢

A *pa1 = new A(a2);
A const * pa2 = pa1;
A const * const pa3 = pa2;

【问题讨论】:

  • 当您说“编写智能指针”时,您真的是指“使用智能指针吗?”您并没有真正考虑实现自己的智能指针类,是吗?

标签: c++


【解决方案1】:

当难以预测何时应该删除对象时,智能指针最有用。例如:如果您在一个点创建一个对象,并且该对象可能在另一个很远的点被删除,或者更重要的是,可能被多个不同的地方删除,智能指针是最好的解决方案。所以基本上,除非你可以确定什么时候应该删除一个对象,并且这样做总是安全的(即没有其他对象持有指向该对象的指针)使用智能指针。

另外一些朋友使用的观点是,智能指针太便宜了(即使用它们的处理成本非常小),分配对象时应该始终使用智能指针在堆上(即使用新的)。这样,您就不必担心内存泄漏或双重释放等问题。

【讨论】:

    【解决方案2】:

    不需要智能指针,因为 new 后面的操作都不会抛出。你只需要:

    A *pa1 = new A(a2);
    A const * pa2 = pa1;
    A const * const pa3 = pa2;
    delete pa1;
    

    如果这不是您要问的,请澄清您的问题。

    【讨论】:

      猜你喜欢
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 2011-12-09
      • 2015-09-27
      相关资源
      最近更新 更多