草庐IT

swig_shared_ptr

全部标签

c++ - 在 C++11 中使用不带托管共享指针的 shared_from_this()

假设我有一个类是enable_shared_from_this的子类。这个基类的文档说在调用shared_from_this之前应该有一个拥有这个类的共享指针。使用new分配类并调用shared_from_this来管理对象是否安全? 最佳答案 正如其他用户已经提到的,在不属于shared_ptr的实例上调用shared_from_this将导致未定义的行为(通常是异常,但也有没有保证)。那么,为什么还要一个答案呢?因为我自己做了一次同样的问题并得到了几乎相同的答案,然后我开始为另一个问题而苦苦挣扎,这个问题紧随其后-我如何保证所有

c++ - 使用 shared_ptr 处理不完整类型的 Pimpl 习语

我正在阅读ScottMeyers的EffectiveModernC++,他正在讨论pimpl习语的使用,并使用unique_ptr指向实现类,但存在特殊成员函数的问题(例如析构函数)要求类型完整。这是因为unique_ptr的默认删除器在使用deletep之前静态断言要删除的类型是否完整。因此类的任何特殊成员函数都必须在实现文件中定义(而不是由编译器生成),在实现类定义之后。在章节的最后,他提到如果使用的智能指针是shared_ptr,就不需要在实现文件中定义特殊的成员函数,这源于它支持自定义的方式删除器。引用:Thedifferenceinbehaviorbetweenstd::un

c++ - 在 shared_from_this() 中 boost weak_ptr_cast

我正在使用boost的共享指针,并使用enable_shared_from_this来启用返回指向this的共享指针。代码如下所示:classfoo:publicboost::enable_shared_from_this{boost::shared_ptrget(){returnshared_from_this();}}为什么shared_from_this会抛出weak_ptr_cast异常? 最佳答案 如果您在堆栈上声明了foo,那么就没有其他指向foo的共享指针。例如:voidbar(){foofooby;fooby.get

c++ - 在类 : scoped_ptr or shared_ptr? 中将智能指针作为参数传递

我有一个类在一个公共(public)方法中创建一个对象。该对象是私有(private)的,对类的用户不可见。此方法然后调用同一类中的其他私有(private)方法并将创建的对象作为参数传递:classFoo{...};classA{private:typedefscoped_ptrFooPtr;voidprivateMethod1(FooPtrfooObj);public:voidshowSomethingOnTheScreen(){FooPtrfooObj(newFoo);privateMethod1(fooObj);};};我相信在这种情况下正确的智能指针将是一个scoped_pt

c++ - boost shared_ptr 和 'this'

我有两个具有父子关系的类(客户&订单目录&文件等)我有typedefboost::shared_ptrParentPtr在父类中创建子类的方法我需要子实例有指向它们父实例的指针。classChild{....ParentPtrm_parent;....}我希望它是一个shared_ptr,这样在存在子项时父项不会消失。我还有其他人持有ParentPtrs给父级(Parents的工厂方法返回一个ParentPtr)问题:如何给child一个ParentPtr尝试(1)。在Parent::ChildFactorychild->m_parent.reset(this);这会导致非常糟糕的事情

c# - 通过 SWIG 为 C# 编译 Quantlib

任何人都有使用SWIG的经验?我目前正在研究QuantLib并看到可以使用SWIG生成C#代码。我们正在探索使用QuantLib和专有闭源库(可能以.Netdll形式提供)来创建财务函数组合库的选项。这个想法是将这两者结合起来创建一个统一的super库。我看过.NetportofQuantLib,但它似乎没有得到积极维护(并且不完全确定实际移植了多少),所以我避免使用它。第1步是评估生成可“随处”使用的库的难度,即MS办公应用程序(通过VBA)、控制台应用程序以及服务器端(例如Web应用程序)。我假设这涉及COMInterop,但我不知道从哪里开始,或者我是否在正确的轨道上。我没有使用

c++ - 将 make_shared 与 protected 构造函数 + 抽象接口(interface)一起使用

给定一个抽象接口(interface)和一个从该接口(interface)派生的实现,其中构造函数受到保护(只能从类工厂创建这些对象-以实现DI模式),我如何在工厂函数中使用make_shared?例如:classIInterface{public:virtualvoidMethod()=0;};classInterfaceImpl:publicIInterface{public:virtualvoidMethod(){}protected:InterfaceImpl(){}};std::shared_ptrCreate(){std::shared_ptrobject=std::mak

c++ - 使用重载放置新/删除提升 shared_ptr

我像这样将boostshared_ptr与我自己的内存管理器一起使用(精简示例,我希望其中没有错误):classMemoryManager{public:/**Allocatesomememory.*/inlinevoid*allocate(size_tnbytes){returnmalloc(nbytes);}/**Removememoryagian.*/inlinevoiddeallocate(void*p){free(p);}};MemoryManagerglobalMM;//Newoperatorsinlinevoid*operatornew(size_tnbytes,ogl2

c++ - boost::weak_ptr 过期后的排序顺序?

对于boost::weak_ptroperator被定义,以便它可以在关联容器中使用。我的问题是:几个weak_ptr的排序顺序是?即使其中一些对象的引用计数变为零,对象是否稳定?这不会与std::set这样的容器混淆吗??例子:usingnamespaceboost;shared_ptrsptrA1(newA);weak_ptrwptrA1=sptrA1;weak_ptrwptrA2;{//beginScope1shared_ptrsptrA2(newA);wptrA2=sptrA2;assert(wptrA1如果断言#1为真,断言#2是否始终为真?是wptrA2在范围1之前和之后处

c++ - 返回 vector<Foo> 或 shared_ptr<vector<Foo>>?

在一个函数中,哪个“return”更合适?一个。vector?B.shared_ptr>?换句话说,哪个文案不那么重,你会怎么做,为什么? 最佳答案 我想返回shared_ptr>很少有用。如果有几个对象可以保存它们可以操纵的共享vector,我只会这样做。对我来说,这表明存在设计缺陷。更好的选择可能是通过const引用返回。这避免了(可能很昂贵的)复制操作,但不允许访问者更改vector。如果您要返回本地std::vector您也可以通过参数返回它。如果真要回shared_ptr>,考虑是否shared_ptr>会完成这项工作(载