kri*_*pet 3 c++ pointers std c++11
我知道,它std::shared_ptr使用引用计数,因此它具有复制和移动语义,另一方面std::unique_ptr(因此名称唯一)只有移动语义,因此尝试复制它是一个编译错误.
然而,对我而言,它并不十分清楚.我可以简单地使用std::shared_ptr了std::unique_ptr在大多数情况下,还是应该用std::unique_ptr尽可能因为它更有效,因为它没有照顾引用计数?
另外,我知道智能指针在处理时非常有用,例如异常安全,但它们通常会取代传统的T*指针吗?尽可能使用智能指针而不是传统T*指针是一种很好的编程习惯吗?
经验法则是:
在某些情况下,当指针不带有所有权时,原始指针就可以了 - 例如作为函数的输入参数:
void draw (const shape* sh) {
sh->draw();
}
...
std::unique_ptr<shape> ptr(new triangle);
draw(ptr.get());
Run Code Online (Sandbox Code Playgroud)