当前位置:  开发笔记 > 编程语言 > 正文

auto_ptr设计

如何解决《auto_ptr设计》经验,为你挑选了1个好方法。

在我看来,一个类应该提供一个定义明确的抽象,没有私有成员就不应该在没有类知识的情况下进行修改.但是当我检查"auto_ptr"(或任何其他智能指针)时,违反了此规则.请参阅以下代码

class Foo{
public:
   Foo(){}
};

int main(int argc, char* argv[])
{
   std::auto_ptr fooPtr(new Foo);
   delete fooPtr.operator ->();
   return 0;
}

运算符重载( - >)给出了底层指针,可以在不知道"auto_ptr"的情况下修改它.我不能认为它是一个糟糕的设计,因为智能指针是由C++极客设计的,但我想知道为什么他们允许这个.有没有办法编写没有这个问题的智能指针.

欣赏你的想法.



1> j_random_hac..:

智能指针应该具有两个理想的属性:

    可以检索原始指针(例如,用于传递给传统库函数)

    无法检索原始指针(以防止双重删除)

显然,这些属性是矛盾的,不能同时实现! 甚至Boost shared_ptr等人.有get(),所以他们有这个"问题".在实践中,第一个更重要,所以第二个必须去.

顺便说一下,operator->()当普通的旧get()方法导致同样的问题时,我不确定为什么你达到了稍微模糊的地方:

std::auto_ptr fooPtr(new Foo);
delete fooPtr.get();

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有