shared-ptr相关内容
如果我理解正确,那么weak_ptr不会增加托管对象的引用计数,因此它不表示所有权.它只是让您访问一个对象的生命周期,该对象的生命周期由其他人管理. 所以我真的不明白为什么不能从unique_ptr构造weak_ptr,而只能从shared_ptr构造. 有人可以简要解释一下吗? 解决方案 std::weak_ptr不能使用,除非您通过lock()方式将其转换为std::shared
..
我想将构造的shared_ptr分配给weak_ptr: std::weak_ptr rw = std::shared_ptr(operator new(60), [](void *pi) { operator delete(pi); }); 但是,当我执行rw.expired()时,它显示已过期,表示它为空.有什么建议可以解决我的问题吗? 谢谢.
..
#include #include struct A : public std::enable_shared_from_this { ~A() { auto this_ptr = shared_from_this(); // std::bad_weak_ptr exception here. std:
..
考虑以下代码: #include #include using namespace std; struct MySharedStruct { int i; }; void print_value_of_i(weak_ptr weakPtr) { if (shared_ptr
..
shared_ptr的控制块在存在至少一个weak_ptr时保持活动状态.如果共享指针是用make_shared创建的,则意味着该对象的整个内存将保持分配状态. (对象本身已被适当地破坏,但是由于对象的控制块和内存是像make_shared一样分配在一个块中的,因此只能将它们一起释放.) 我的理解正确吗? 例如,著名的缓存示例" .对象的内存将永远保持分配状态. 在任何实际情况下
..
我正在尝试使用boost::shared_ptr的循环引用,并设计了以下示例: class A{ // Trivial class public: i32 i; A(){} A(i32 a):i(a){} ~A(){ cout changeI(shared_p
..
我只是在学习智能指针,而在将变量的现有位置分配给标准库的共享指针时遇到了麻烦. 例如,假设您有一个不知道其值的int x.使用普通的指针,我就做到了 int* ptr; ptr = &x; 我尝试了使用共享指针的尝试, std::tr1::shared_ptr ptr; ptr = std::make_shared (&x) 所以我对如何做到这一点很迷
..
我一直在考虑使用unique_ptr vs shared_ptr vs own_solution.我不赞成后者,因为我几乎肯定会弄错,但是unique_ptr和shared_ptr都存在问题,因为它们都不能准确地捕捉我想要的东西.我想创建一个明确拥有资源的资源管理器,但是我希望该资源管理器也分发对该资源的引用. 如果我在资源管理器中使用unique_ptr并分发原始指针,则它们有可能会在其他
..
我必须通过boost::shared_ptr: boost::shared_ptr pProfile = boost::make_shared(); 是protobuf的指针,指向protobuf的函数oPerson.set_allocated_profile(pPro
..
根据我以前的问题,我希望boost::shared_ptr实际上是A(或者也许是A*)的子类,以便可以在将A*作为其参数的方法中使用. 请考虑以下课程: class A { public: A(int x) {mX = x;} virtual void setX(int x) {mX = x;} virtual int getX() const {retu
..
看看这个: #include #include 使用Foo = int; 使用FooPtr = std :: shared_ptr
..
来自 en.cppreference.com std :: unique_ptr的典型用法包括: 提供例外 对处理具有动态生存期的对象的类和函数具有安全性,通过 保证正常退出和通过异常退出均被删除 通过具有动态生存期的唯一拥有对象的所有权进入 函数 从函数中获取具有动态生存期 的唯一拥有对象的所有权 作为可移动容器中的元素类型,例如std :: vector,
..
对于一个练习,我需要构建一个多态对象的向量,由于某些原因,共享和唯一ptr在使用它们时都会产生链接错误2019和1120.我没有选择将旧的内存分配方式与“新建"和“删除"一起使用,因此我必须使其工作.我尝试了各种不同的语法选项来执行此操作,但仍然没有运气. *注意: 我们使用Cmake在Visual Studio中将项目绑定在一起 还将对象分为头文件和cpp文件. 这是我现在的对象
..
我需要将派生类的元素添加到抽象类的共享指针列表中. 我一直在尝试.我知道我在下面的示例中尝试创建抽象类的实例,但是我不知道如何使它起作用. 简化的类如下: using namespace std; class Abstract { public: virtual string toString() const = 0; }; class A : public
..
考虑以下示例代码: class Foo { }; class Bar : public Foo { }; class FooCollection { protected: vector > d_foos; }; class BarCollection : public FooCollection { public: vector
..
我有两个类A和B,B继承自A. 如果我有一个确实是B子类型的shared_ptr对象,我该如何执行动态强制转换以访问B的API(请记住我的对象是shared_ptr,而不仅仅是A? 解决方案 如果只想从B调用函数,则可以使用以下之一: std::shared_ptr ap = ...; dynamic_cast(*ap).b_function(); if (
..
我在main中创建了sample类的指针.我正在将此指针传递给函数function1().该函数必须使用指针作为共享指针,并使用该指针执行一些操作.在function1()退出期间,由于shared_ptr而调用了sample的析构函数.当我将相同的指针传递给不同的函数时,该指针不再有效,并且程序崩溃. 1.如何延迟function1()中的删除操作(销毁调用)? 2.另一种方法是什么
..
我有一个我知道将永远归于std::shared_ptr的类.但是,将shared_ptr甚至weak_ptr传递给不需要所有权或生存期保证的函数和方法会产生不必要的开销.为了解决这个问题,我经常将原始指针传递给函数.类本身是从std::enable_shared_from_this继承的,因此,如果函数需要获取指针的所有权,则可以使用该类的方法来获取shared_ptr. 一切正常.但是在某
..
我碰到了这篇帖子,其中一篇@kerek SB州的答案 std::shared_ptr p1 = std::make_shared("foo"); std::shared_ptr p2(new Object("foo")); 在您的代码中,第二个变量只是一个裸指针,而不是 完全共享指针. 现在在肉上. make_shared(在实践中)
..
这是cppreference的std::shared_ptr的实现笔记部分的引文,其中提到有两种不同的指针(如粗体所示):可以由get()返回的一个指针,以及将实际数据保存在其中的一个指针.控制块. 在典型的实现中,std::shared_ptr仅包含两个指针: 存储的指针(get()返回的指针) 指向控制块的指针 控制块是一个动态分配的对象,其中包含: 指向托管对象的指
..