auto_ptr有拷贝语义,拷贝后源对象变得无效,这可能引发很严重的问题;而unique_ptr则无拷贝语义,但提供了移动语义,这样的错误不再可能发生,因为很明显必须使用std::move()进行转移。 auto_ptr不支持拷贝和赋值操作,不能用在STL标准容器中。STL容器中的元素经常要支持拷贝、赋值操作,在这过程中auto_ptr会传递所有权,...
std::auto_ptr<std::string> ps (new std::string(str)); C++ 11 shared_ptr unique_ptr weak_ptr auto_ptr(被 C++11 弃用) Class shared_ptr 实现共享式拥有(shared ownership)概念。多个智能指针指向相同对象,该对象和其相关资源会在 “最后一个 reference 被销毁” 时被释放。为了在结构较复杂的情景...
1、unique_ptr 一个unique_ptr拥有它指向的对象的独占所有权,并且会在指针超出范围时销毁该对象。unique_ptr明确地阻止复制其包含的指针。不过可以使用std::move函数必须用于将包含的指针的所有权转移给另一个unique_ptr。示例代码 2、shared_ptr 引用计数的智能指针。当您想要将一个原始指针分配给多个所有者时使用...
unique_ptr<Test> p3(new Test(3)); p2.reset(p3.release());//先释放了p2所指向的内存,让p2指向了原来p3指向的对象,p3被置为空 p2.release();//错误,p2不会释放内存,而且丢失了能够释放内存的指针 auto p = p2.release();//正确,但必须要记得delete(p) *///test4 unique_ptr作为函数的返回值...
因此,unique_ptr比auto_ptr更安全。 但unique_ptr还有更聪明的地方。有时候,会将一个智能指针赋给另一个并不会留下危险的悬挂指针。假设有如下函数定义: 1 2 3 4 5 unique_ptr<string> demo(const char * s) { unique_ptr<string> temp (new string (s)); return temp; } 并假设编写了如下代码:...
unique_ptr weak_ptr auto_ptr(被 C++11 弃用)Class shared_ptr 实现共享式拥有(shared ownership)概念。多个智能指针指向相同对象,该对象和其相关资源会在 “最后一个 reference 被销毁” 时被释放。为了在结构较复杂的情景中执行上述工作,标准库提供 weak_ptr、bad_weak_ptr 和 enable_shared_from_this 等辅助...
這個程式庫現在包含新的、 更安全的智慧型指標型別 unique_ptr (其已重新啟用右值參考)。 如此一來取代 auto_ptr ; unique_ptr 可以藉由可移動,但不是 copyable 避免 auto_ptr 陷阱。 它可讓您實作嚴格的擁有權語意,而不會影響到安全。 它也可與都瞭解的右值參考的 Visual C++ 2010年容器。 容器現在有新...
STL 智能指针 auto_ptr、unique_ptr、shared_ptr 和 weak_ptr。 auto_ptr 在 C++11已被摒弃,在C++17中已经移除不可用...
unique_ptr weak_ptr auto_ptr(被 C++11 弃用)Class shared_ptr 实现共享式拥有(shared ownership)概念。多个智能指针指向相同对象,该对象和其相关资源会在 “最后一个 reference 被销毁” 时被释放。为了在结构较复杂的情景中执行上述工作,标准库提供 weak_ptr、bad_weak_ptr 和 enable_shared_from_this 等辅助...
原文:Using std::unique_ptr With C APIs 绝大多数人都觉得std::unique_ptr是对new和delete的一个 RAII 管理类。这话当然没错,并且我绝大多数时候也是因此而用std::unique_ptr的。但是,鲜为人知的是,std::unique_ptr可以用自定义的 deleter 类型来销毁它所有的指针,也就是一种能用 C++ 的delete运算符以外...