与使用原始指针的类似(但不限于)某些高级技术相比,每个智能指针的等效用途是什么?
我的理解很少,但我可以从中收集:
std::shared_ptr::reset
时,将调用基础deallocator
。std::shared_ptr
,它不会增加引用计数,并且在其父std::shared_ptr
不再存在时无效。可能会返回无效的引用。使用前请务必检查。RAW POINTER等效示例
引用计数,缓存实施: std::map<std::string, std::pair<long, BITMAP*> > _cache;
拥有所有权转让的单身人士:
class Keyboard {
public:
//...
static Keyboard* CreateKeyboard();
~Keyboard();
//...
private:
//...
Keyboard();
static Keyboard* _instance;
//...
};
聚合容器,无所有权:空间分区图形和树,迭代容器等。
复合容器,所有权:大型对象。
- 编辑 -
在我工作的时候,我遇到了一个有趣的案例,DeadMG指出智能指针应该被用作简单的抽象来处理资源管理;那些在声明点无法在堆上创建但必须在以后创建的文件范围对象呢?
答案 0 :(得分:5)
每个智能指针应该替换的成语是什么?
它们中的每一个,最终都涉及摧毁指向的资源。换句话说,几乎所有这些。我可以想到没有涉及原始指针的成语,这些指针不涉及破坏指向资源。其他每一种用法都不是一种习惯用语,它只是“使用指针”。