首页 > TAG信息列表 > shared-ptr

c-在SWIG for Python中包装boost :: shared_ptr的std :: vector

编辑:解决了,我的错误;在我的回答中解释. 我有这个: std::vector < boost::shared_ptr < Entity > > entities; 我尝试通过SWIG公开它,如下所示: %include "boost_shared_ptr.i" %include "std_vector.i" %shared_ptr(Entity) %include <Entity.h> namespace std {

c – std :: enable_shared_from_this:是否允许在析构函数中调用shared_from_this()?

#include <memory> #include <iostream> struct A : public std::enable_shared_from_this<A> { ~A() { auto this_ptr = shared_from_this(); // std::bad_weak_ptr exception here. std::cout << "this: " <

c – Boost :: process输出空白行

我正在开发一个应用程序,我需要根据用户输入启动和停止各种不同的可执行文件.我希望我的“核心”程序在这些可执行程序运行时正常运行,即不等待它们的终止,这在理论上可能是infinte.除此之外,我需要能够接收std_out并将std_in发送到这些可执行文件. 目前我有一个设置,我有一个流程

c – 从shared_ptr中提取原始指针

是否可以从std :: shared_ptr或std :: tr1 :: shared_ptr对象中提取原始指针?目的是告诉智能指针对象我不希望它再管理对象的生命周期.上下文是我有一个API,它接受来自用户的原始指针并对该对象进行一些处理.为了使事情更容易管理API从这个原始指针创建一个shared_ptr.现在,用户可能

c – 使用shared_ptr获得独特的所有权(种类) – 这是一种好的做法吗?

这很难解释,但我会尽我所能.所以,我有一个RenderComponent,EventManager和RenderSystem.在我的RenderComponents构造函数中,我引发了RenderSystem订阅的renderComponentCreated事件.使用event args对象,我传递一个RenderNode作为数据,其中包含renderSystem绘制事物所需的信息(drawa

c – std :: enable_shared_from_this;公共与私人

我正在玩一些使用shared_ptr和enable_shared_from_this,而我遇到了一些我不太懂的东西. 在我的第一次尝试中,我构建了这样的东西: class shared_test : std::enable_shared_from_this<shared_test> { public: void print(bool recursive) { if (recursive) {

C 11 unique_ptr和shared_ptr是否能够转换为彼此的类型?

C 11标准库是否提供了从std :: shared_ptr转换为std :: unique_ptr的任何实用程序,反之亦然?这是安全的操作吗?解决方法: std::unique_ptr is the C++11 way to express exclusive ownership, but one of its most attractive features is that it easily and efficiently conver

c – 我们应该通过引用还是通过值传递shared_ptr?

当一个函数采用shared_ptr(来自boost或C 11 STL)时,你传递它吗? > by const reference:void foo(const shared_ptr< T>& p) >或按值:void foo(shared_ptr< T> p)? 我更喜欢第一种方法,因为我怀疑它会更快.但这真的值得吗还是还有其他问题吗? 您能否说出您选择的原因或案例,为什么您认为

c – 使shared_ptr失去内存的所有权

我有一个shared_ptr< MyProto>我经过的.最终,在某些情况下,我想将原始指针传递给一个函数,然后该函数成为内存所有者.在这些情况下,shared_ptr不再负责释放内存,因为我调用的函数取得了所有权.如何让shared_ptr失去所有权? 我想让shared_ptr失去所有权的原因是我想使用协议缓冲区的A

c – 无法从哑指针向量切换到boost :: shared_ptr

好吧,这让我在几个月内难以接受,所以我会看看是否有其他人可以帮忙解决这个问题. 所以在我的主程序中,我有两种结构(solarBody_t,ship_t),它们都是从同一个基类(physical_t)派生的.我制作了两个物体的矢量,因为我不能将solarBody和一艘船放在同一个矢量中.它们都是哑指针向量. 我尝

使用C 11复制构造boost :: shared_ptr时出错

昨天我安装了clang 3.1和g 4.7并尝试编译我正在进行的项目.我很惊讶地看到它没有使用两个编译器进行编译.但最令我惊讶的是问题在于boost :: shared_ptr. 显然,由于该类定义了一个移动构造函数/赋值运算符,因此隐式删除了复制构造函数.所以这段代码: #include <boost/shared_ptr.hp

c – 正确初始化boost :: shared_ptr的方法

我刚刚开始使用boost :: shared_ptr,所以我一直在搜索,我发现有几种方法可以初始化它: boost::shared_ptr<MyClass> myclass = boost::shared_ptr<MyClass>(new MyClass()); boost::shared_ptr<MyClass> myclass = new MyClass(); boost::shared_ptr<MyClass> myclass = boost::ma

c – weak_ptr在shared_ptr中的作用

我理解shared_ptr如何工作,除了weak_ptr的角色.我理解它在那里检测循环引用时引用计数不为零,但除此之外,我不明白它究竟是如何做到的.它有什么作用?解决方法:另见:When is std::weak_ptr useful?为什么,How does weak_ptr work?为何. 我将举例说明我如何使用它,虽然我掀起的示例代码

c – 通过value或const ref传递std :: shared_ptr然后存储在容器中?

考虑以下向量: std::vector<std::shared_ptr<X>> myVector; 以及以下两个将给定元素添加到向量的函数: void foo1(std::shared_ptr<X> x) { myVector.push_back(x); } void foo2(const std::shared_ptr<X>& x) { myVector.push_back(x); } 我的理解是两个函数都将shared

c – 替换std :: vector中的shared_ptr元素

我有一个shared_ptrs向量,如下所示. std::vector<std::shared_ptr<SharedThing>> things; 现在让我们说我将一些shared_ptrs推送到向量上,每个元素现在的引用计数为1. 当我需要用新的shared_ptr替换其中一个元素时,我希望旧的shared_ptr超出范围.常规元素赋值是否会实现,或者只是

C:访问shared_ptr的容器应该返回raw或shared ptr吗?

如果我使用shared_ptrs容器并明确允许访问其元素,如果我打算让容器成为负责“清理”的容器,我应该返回shared_ptrs或原始指针吗? class Container { private: std:vector<shared_ptr<Foo> > foo_ptrs; public: shared_ptr<Foo> operator[](std::size_t index) const {}; /

c – 检查shared_ptr的容器是否包含指针?

使用Observer模式.我有一个名为Monitor的类,它正在监视一组对象.该类是一个Observer,它的集合中的每个对象都是一个Subject.目前,该集合是作为shared_ptr的std :: list实现的.在Monitor类的Update方法中,我想检查更新是否来自其集合中的一个对象. std::list<SomeSharedPointer> it

我如何在C中的应用程序上共享“this”实例?

说我有: class Foo { public: Foo(std::function< void(std::shared_ptr< Foo >) > callback); void shareMyFoo() { callback(std::make_shared< Foo >(this)); } .... }; 调用shareMyFoo()时,某人将有机会复制共享指针.不幸的是,因为它会死 – 也

c – 使用受保护的析构函数删除对象

我必须为类编写一个共享指针,并且它必须做的许多其他事情是确保它可以删除它指向的对象. 如何编写可与具有受保护的析构函数的对象一起使用的解决方案? 另外,如果对象是使用placement new创建的,我不应该在对象上调用delete,因为该空间可能仍在使用(删除调用甚至可以工作吗?).我怎样

c – 返回特定类型对象的工厂函数 – 如何以更好的方式执行

我有3个类B,C,D,它们派生自一个基类A: class A { // body }; class B : public A { // body }; class C : public A { // body }; class D : public A { // body }; 我想创建一个工厂函数,让我创建特定类型的对象(B,C或D)并将其作为指向A类的指针返回: typedef std::shared_ptr

c – 分配解除引用的shared_ptr

考虑以下课程: struct MyClass { int mId; MyClass(int id): mId(id) {} ~MyClass() { std::cout << "deleting: " << mId << std::endl; } }; 用法: std::shared_ptr<MyClass> p(new MyClass(0)); MyClass& m = *p; m = MyClass

c – 为什么没有bool std :: operator ==(T1 * a,std :: shared_ptr b)的重载?

我注意到stdlib没有为shared_ptr和raw指针的相等运算符提供重载.如果你有一个std :: unordered_set< std :: shared_ptr< Foo>>那么这尤其不方便并且你希望通过传递原始Foo来擦除元素* 是否存在没有这种过载的具体原因?在我看来,它很容易实现: template<typename T1, typename T2> b

c – 运算符==重载抽象类和shared_ptr

我想在抽象类的shared_ptr列表中使用std :: find,但是我收到了一个错误.有没有办法比较两个shared_ptr通过在std :: find中解除引用它们? 是否有可能让朋友操作符==重载shared_ptr< A>? 最小的例子: #include "point.h" #include <list> #include <algorithm> #include <memory> usi

c – Shared_ptr和unique_ptr,但有异常

从en.cppreference.com起 Typical uses of std::unique_ptr include: providing exception safety to classes and functions that handle objects with dynamic lifetime, by guaranteeing deletion on both normal exit and exit through exception passing owne

理解c共享指针

嗨我正在制作我自己的引用计数智能指针,但在我开始之前有两个概念我不太明白. >当我创建一个共享指针指向一个对象时,我必须为一个结构/类分配内存,该结构/类将包含诸如引用计数(最初为一个)之类的信息,也可能是一个互斥量以及递增和递减.当我使用时,假设=运算符使另一个共享指针也