unique<Obj> ptr2( std::move(ptr1) ); 这个效果和auto_ptr直接赋值是一样的,就是ptr1不再拥有Obj对象了,所以ptr1不能再用来操作内存中的Obj对象,因为这个是手动操作的, 所以程序员自己也会更加小心。 3. shared_ptr auto_ptr和unique_ptr都只能一个智能指针引用对象,而shared_ptr则是可以多个智能指针同时...
unique_ptr<A> ptr2 = ptr1; 但是,unique_ptr可以使用新的语义,即使用std :: move()函数将包含的指针的所有权转移到另一个unique_ptr。 // Works, resource now stored in ptr2 unique_ptr<A> ptr2 = move(ptr1); 所以,最好使用unique_ptr,当我们想要一个指向一个对象的指针,当该单个指针被销毁时...
使用std::unique_ptr 可以避免手动管理动态分配的内存资源,因为 std::unique_ptr 自身就拥有资源的所有权,当 std::unique_ptr 被销毁时,它所管理的资源也会被自动释放。这使得代码更加简洁、安全和易于维护。 std::unique_ptr 有以下几个主要特点: 不支持拷贝和赋值操作,即不能直接复制或赋值一个std::unique_p...
unique_ptr 是一个独享所有权的智能指针,它提供了严格意义上的所有权。它取代了C++98中的auto_ptr。 unique_ptr对象包装一个原始指针,并负责其生命周期。当该对象被销毁时,会在其析构函数中删除关联的原始指针。 unique_ptr具有->和*运算符重载符,因此它可以像普通指针一样使用。 不管函数正常退出还是异常退出(...
模板auto_ptr是C++98提供的解决方案,C++11已摒弃。 模板unique_ptr、shared_ptr是C++11提供的解决方案. 为什么要摒弃auto_ptr呢? 先来看下面的赋值语句: auto_ptr<string> ps(new string("I am a boy.")); auto_ptr<stirng> vocation; vocation = ps; ...
虽然 auto_ptr 已被摒弃,但在实际项目中仍可使用,但建议使用较新的 unique_ptr,因为 unique_ptr 比 auto_ptr 更加安全。shared_ptr 和 weak_ptr 则是 C+11 从准标准库 Boost 中引入的两种智能指针。此外,Boost 库还提出了 boost::scoped_ptr、boost::scoped_array、boost::intrusive_ptr 等智能指针,虽然...
2. unique_ptr(替换auto_ptr) unique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。它对于避免资源泄露(例如“以new创建对象后因为发生异常而忘记调用delete”)特别有用。 采用所有权模式,还是上面那个例子 unique_ptr<string>p3(newstring("auto"));unique_ptr<string>p4; ...
std::auto_ptr和std::unique_ptr是C++中的智能指针类型,用于管理动态分配的内存资源,避免内存泄漏和资源泄漏。 std::auto_ptr是C++98标准引入的智能指针,它在拷贝构造和赋值操作时会转移指针的所有权,因此只能有一个auto_ptr指向同一块内存。这种转移所有权的行为可能导致潜在的问题,因为当auto_ptr被销毁时,...
C++ STL为我们提供了四种智能指针:auto_ptr、unique_ptr、shared_ptr和weak_ptr;其中auto_ptr是C++98提供,在C++11中建议摒弃不用,至于原因,后面会讲到;而unique_ptr、shared_ptr和weak_ptr则是随着C++11的到来而加入到STL中。 智能指针的选择 如果程序中要使用多个指向同一个对象的指针,那么应该使用shared_ptr;比...