The sample code to show the key difference.
#include <tr1/memory>
#include <iostream>
using namespace std;
class Strong {
public:
~Strong() {
cout << "destroy Strong\n";
}
tr1::shared_ptr<Strong> m_cycle;
};
class Weak {
public:
~Weak() {
cout << "destroy Weak\n";
}
tr1::weak_ptr<Weak> m_cycle;
};
int main() {
// the `Strong' object created above is now leaked!
{
tr1::shared_ptr<Strong> p(new Foo);
p->m_cycle = p;
}
// the 'Weak' object created above is released!
{
tr1::shared_ptr<Weak> shared(new Weak);
shared->m_cycle = shared;
}
return 0;
}
分享到:
相关推荐
在 C++ 中,有四种智能指针:auto_ptr、unique_ptr、shared_ptr 和 weak_ptr,每种智能指针都有其特点和使用场景。 一、auto_ptr auto_ptr 是 C++98 中引入的智能指针,它可以自动释放动态分配的内存。但是,auto_...
C++ 智能指针(shared_ptr/weak_ptr)源码 源码位置:gcc-6.1.0\gcc-6.1.0\libstdc++-v3\include\tr1 这里只单列shared_ptr.h文件用于分析
3. 从原始指针转换:`std::shared_ptr<T> ptrRaw(ptr_raw);`,其中`ptr_raw`是原始指针。 4. 从另一个`shared_ptr`复制:`std::shared_ptr<T> ptrCopy(ptrOther);`,这样两个`shared_ptr`将共享相同的引用计数。 ...
本文主要讨论了三种智能指针:`shared_ptr`、`unique_ptr`和`weak_ptr`。 首先,`shared_ptr`是引用计数型智能指针,它维护了一个内部的引用计数,用于跟踪有多少个`shared_ptr`实例指向同一对象。当创建一个新的`...
### shared_ptr只能对new的内存操作 在C++标准库中,`std::shared_ptr`(在早期版本中可能使用`boost::shared_ptr`)是一种智能指针,它通过引用计数来管理动态分配的对象生命周期。`std::shared_ptr`的设计目的是...
在智能指针家族中,`shared_ptr`和`weak_ptr`是TR1(Technical Report 1)的一部分,也被称为Boost库的一部分,并被整合到了C++11标准中。 ### shared_ptr `shared_ptr`是一种引用计数智能指针,当一个`shared_ptr...
【Boost智能指针详解:scoped_ptr、shared_ptr与weak_ptr】 智能指针是C++中用来自动管理动态分配内存的对象,它可以确保在适当的时间释放内存,以防止内存泄漏。Boost库提供了一组智能指针类型,包括scoped_ptr、...
`std::shared_ptr`是C++标准库中的一个智能指针类型,属于弱所有者(weak ownership)的智能指针,用于管理动态分配的对象。 智能指针的核心理念在于自动管理对象的生命周期。当不再有智能指针指向一个对象时,该...
`shared_ptr`和`weak_ptr`是两种常见的智能指针类型,分别代表了强引用和弱引用的概念。 `shared_ptr`是C++11引入的一种智能指针,它管理一个动态分配的对象,并在不再有引用指向该对象时自动删除它。`shared_ptr`...
需要注意的是,当使用原始指针来构造shared_ptr时,如果原始指针已经是另一个shared_ptr或weak_ptr的一部分,那么这种行为将导致未定义行为。因此,在使用原始指针来构造shared_ptr之前,必须确保这个原始指针是没有...
解决这种问题的一个常用方法是使用std::weak_ptr,它可以不增加引用计数,从而打破循环引用。 其次是自引用问题。如果一个对象内部持有一个std::shared_ptr成员,该成员又间接或直接地指向同一个对象,那么这个对象...
虽然`weak_ptr`不参与对象的生命周期管理,但它的构造和析构过程中涉及到`shared_ptr`的引用计数,因此`weak_ptr`的使用也必须是线程安全的。在`shared_ptr`的线程安全设计中,`weak_ptr`的这部分交互也被考虑在内,...
`unique_ptr`的删除器通常在构造函数中指定,而`shared_ptr`的删除器可以通过弱指针(`weak_ptr`)共享,以确保即使所有`shared_ptr`都失效后,仍能正确释放资源。 3. **构造函数和赋值操作符**:为了创建和操作...
在C++11中,有三种类型的智能指针:std::shared_ptr、std::unique_ptr和std::weak_ptr,它们分别适用于不同的内存管理场景。 std::shared_ptr是其中的一种,它使用引用计数机制来跟踪指向同一对象的智能指针数量。...
另外,`shared_ptr`还可以与其他辅助类一起使用,如`weak_ptr`用于解决循环引用问题,以及`enable_shared_from_this`帮助在对象内部创建`shared_ptr`实例。 总的来说,`shared_ptr`是C++中一种强大的工具,它简化了...
3. **std::weak_ptr**:std::weak_ptr是std::shared_ptr的辅助类,它不增加对象的引用计数,而是保持对对象的弱引用。这避免了循环引用的问题,当对象被所有std::shared_ptr释放后,std::weak_ptr尝试访问对象时会抛...
其中,`weak_ptr`是为了解决`shared_ptr`中可能出现的循环引用问题而引入的一种特殊类型的智能指针。本文将深入探讨`weak_ptr`的概念、用途及其使用方法。 1. 为什么需要`weak_ptr`? `shared_ptr`是C++11中引入的...