25

与使用原始指针的类似(但不限于)一些高级技术相比,每个智能指针的等效用途是什么?

我的理解很少,但据我所知:

  • 原始指针:只有在你真的、真的、真的、真的知道你在做什么并且小心地隐藏在界面后面的用法时才使用。
  • std::auto_ptr:已过时永不使用。
  • std::unique_ptr:在赋值时转移所有权的单例指针。
  • std::shared_ptr:引用计数指针,在分配时不转移所有权,但增加其引用计数。当所有引用离开范围或显式地调用std::shared_ptr::reset底层时deallocator
  • std::weak_ptr:std::shared_ptr不增加引用计数并且在其父std::shared_ptr不再存在时失效的子类型。可能返回和无效引用。使用前请务必检查。

原始指针等效示例

引用计数,缓存实现: std::map<std::string, std::pair<long, BITMAP*> > _cache;

所有权转让的单身人士:

class Keyboard {
public:
//...
    static Keyboard* CreateKeyboard();
    ~Keyboard();
//...
private:
//...
    Keyboard();
    static Keyboard* _instance;
//...
};

聚合容器,无所有权:空间分区图和树,迭代容器等。

复合容器,所有权:大型对象。

- 编辑 -

在我工作的过程中,我遇到了一个有趣的案例,DeadMG 指出智能指针应该被用作简单的抽象来处理资源管理;不能在声明时在堆上创建但必须在以后创建的文件范围对象呢?

4

1 回答 1

5

每个智能指针应该替换什么成语?

它们中的每一个最终都涉及破坏指向的资源。换句话说,几乎所有这些。我想不出任何涉及不涉及破坏指向资源的原始指针的习语。其他所有用法都不是真正的成语,它只是“使用指针”。

于 2013-08-16T02:23:31.423 回答