shared_ptr<>是C++中的智能指针,用于管理动态分配的对象。它提供了自动的内存管理和资源释放,可以避免内存泄漏和悬空指针的问题。 在C++中,shared_ptr<>可以通过重载bool操...
shared_ptr 有两种类型转换的函数,一个是 static_pointer_cast, 一个是 dynamic_pointer_cast. 其实用法真的和 C++ 提供的 static_cast 和 dynamic_cast 很像,再结合 3.3. 的代码和以下类似的代码,几乎没什么好讲的: 123 shared_ptr<A>ptra;shared_ptr<B>ptrb(newB());ptra=dynamic_pointer_cast<A>(p...
通过std::static_pointer_cast<Base>对指向该对象的shared_ptr(类型为shared_ptr<Base>)进行转换(代码行4),转换成std::shared_ptr<Deriver>类型的shared_ptr对象(将该指向派生类的"指针"转换为指向基类的“指针”,这里之所以用引号包围指针二字,因为其并不是裸指针而是智能指针shared_ptr对象) 为了查看转换之后的...
my_shared_ptr(D * ptr): m_ptr(ptr), m_ref_count(new unsigned int(1)){ //这里拿到了类型D, 可用于初始化lambda并保存 auto deleter = [](T * ptr) {delete static_cast<D*>(ptr);}; m_deleter = deleter; } ... ~my_shared_ptr(){ ... m_deleter(m_ptr); } }; 这样我们也能...
-shared_ptr<void> - 优点: 能存储void*的指针, 而void*可以指向任意类型, 从而变成泛型的指针容器. - 缺点: 丧失了原来的类型信息, 为了需要的时候正确使用, 需要用static_pointer_cast<T>转换. 转换会使代码不够安全, 建议不这样用. View Code
在所有情况下,指针类型 Other* 必须可转换为 T*。线程安全性多个线程可以同时读取和写入不同的 shared_ptr 对象,即使这些对象是共享所有权的副本。成员展开表 名称说明 构造函数 shared_ptr 构造一个 shared_ptr。 ~shared_ptr 销毁shared_ptr。 Typedef element_type 元素的类型。 weak_type 指向元素的弱...
…… shared_ptr 还会自动释放相关联的内存当动态对象不再被使用时,shared_ptr 类会自动释放动态对象,这一特性使得动态内存的使用变得非常容易。例如,我们可能有一个函数,它返回一个 shared_ptr,指向一个 Foo 类型的动态分配的对象,对象是通过一个类型为 T 的参数进行初始化的:...
类型转换请使用:static_pointer_cast<T>,dynamic_pointer_cast<T>。 循环引用 循环引用问题 classB;// 前向声明classA{public:// 正确,不会增减引用计数,不造成智能指针循环引用,但是weak_ptr没有->和*,需要使用时必须先调用其lock函数返回一个shared_ptr然后才能用// std::weak_ptr<B> m_b;// 错误,会...
weak_ptr<int> wp2(wp1); //weak_ptr<int> wp3(sp); 通过一个 shared_ptr 对象构造了一个可用的 weak_ptr 实例对象 weak_ptr<int> wp3(sp); weak_ptr<int> wp4; //wp4 = sp; 通过一个 shared_ptr 对象构造了一个可用的 weak_ptr 实例对象(这是一个隐式类型转换) ...