草庐IT

swig_shared_ptr

全部标签

c++ - Visual Studio 2010 中 std::make_shared() 的友元函数(不是 Boost)

如何创建std::make_shared()的友元函数。我试过:classMyClass{public:friendstd::shared_ptrstd::make_shared();//or//friendstd::shared_ptrstd::make_shared();protected:MyClass();};但它不起作用(我使用的是VisualStudio2010SP1) 最佳答案 如何向您的类添加一个静态方法:classFoo{public:staticshared_ptrcreate(){returnstd::shar

c++ - 特化 std::make_shared

我有一个具有严格对齐要求(由于使用了AVX操作)的类型,它大于平台默认对齐方式。为了简化此类的使用,我想专门化std::make_shared以始终为该类型使用合适的分配器。像这样:namespacestd{templateinlineautomake_shared(Args&&...args){returnstd::allocate_shared(allocator_type,std::forward(args)...);}}我的问题是,标准允许这样做吗?它会按预期工作吗? 最佳答案 来自N4140[namespace.std]/

c++ - 为什么我们需要 C++11 中的 weak_ptr?

我正在阅读NicolaiM.Josuttis的“TheC++StandardLibrary”一书以了解弱指针。作者提到了需要weak_ptr的两个原因,我不明白第二个原因。任何人都可以提供一个简单的解释以及以下原因的示例(引自书中):Anotherexampleoccurswhenyouexplicitlywanttosharebutnotownanobject.Thus,youhavethesemanticsthatthelifetimeofareferencetoanobjectoutlivestheobjectitrefersto.Here,shared_ptrswouldnev

c++ - 将这种原始指针情况变成 unique_ptr?

我有这样的代码:ISessionUpdater*updater=nullptr;if(eventName=="test")updater=newTestJSONSessionUpdater(doc);if(eventName=="plus")updater=newPlusJSONSessionUpdater(doc);if(updater){boolresult=updater->update(data);deleteupdater;returnresult;}returnfalse;除了使用unique_ptr之外,还有什么办法可以做这样的事情吗?也就是说,只有1次调用update(

c++ - 使 shared_ptr 失去内存所有权

我有一个shared_ptr我绕过它。最终,在某些情况下,我想将原始指针传递给一个函数,然后该函数成为内存所有者。在这些情况下shared_ptr不再负责释放内存,因为我调用的函数获得了所有权。我如何获得shared_ptr失去所有权?我想要shared_ptr的原因失去所有权是因为我想使用ProtocolBuffer的AddAllocated功能,它接受一个已经分配的指针并获得它的所有权。例子:shared_ptrmyProtoSharedPtr=//bythispointthisisthelastreferencetotheheapallocatedMyProto//Iwantto

具有抽象基类的 C++ boost::ptr_map 导致插入问题

在我的lastquestion之后我有一个抽象基类Action,它充当执行各种不同操作的接口(interface)。为了实现抽象层,我有一个ActionHandler类,其中存储各种Action:classActionHandler{public:ActionHandler();~ActionHandler();Action&getAction(std::stringActionString);private:boost::ptr_mapcmdmap;};我从对我之前问题的回答中了解到,boost会自动处理释放任何插入到该映射中的指针类型(类)。所以,我现在尝试插入从Action派生的

c++ - 为什么我不应该总是使用 shared_ptr 和 unique_ptr 而是使用普通指针?

我有C#和obj-c的背景,所以RC/GC是我(仍然)珍视的东西。当我开始更深入地学习C++时,我一直想知道为什么在它们如此不受管理时我会使用普通指针而不是其他替代解决方案?shared_ptr提供了一种很好的方式来存储引用并且不会在不删除它们的情况下丢失它们。我可以看到普通指针的实用方法,但它们似乎只是不好的做法。有人可以解释这些替代方案吗? 最佳答案 当然,如果他们拥有指针,我们鼓励您使用共享和唯一的ptr。但是,如果您只需要一个观察者,那么原始指针就可以了(指针不对其指向的任何内容负责)。std::uniqe_ptr基本上没有

c++ - SomeClass **ptr; 之间的区别和 SomeClass *ptr;

抱歉,这看起来像是一个菜鸟问题,但对Google来说却是一个真正的痛苦。我正在使用C++,虽然我可以通过指针和引用获得,但有时对我来说仍然很神秘。我有一些代码,类似于SomeClassName**pointer,我想知道为什么有两个星号而不是一个? 最佳答案 用图片来解释要容易得多,但我们还是试一试。如果您已经知道其中的一些内容,我们深表歉意。指针只是一个保存值的变量,就像int或char一样。使它成为指针的原因是该变量中的值是其他地方内存中的地址。示例更简单。假设我们有3个这样声明的变量:intiVar=42;//intint*p

c# - 使用 SWIG 从 C++ 生成 C# 接口(interface)

如何使用SWIG通过SWIG从C++生成C#接口(interface)(或至少是C#可模拟基类)?给定:C++:classIWidget{public:virtualvoidFlob()=0;};classWidget:publicIWidget{public:voidFlob(){};};我想输出C#:publicinterfaceIWidget{voidFlob();}publicclassWidget:IWidget{...}注意:解决方案不一定是接口(interface),但我确实需要能够使用模拟框架(例如Moq或Rhino.Mocks)来模拟C#Widget类的基类。我的尝试

c++ - 包含抽象基类的 ptr_map 的映射对象

我有一个boost::ptr_map,它将抽象基类(例如VectorWrapperBase)存储为值,这允许我将字符串映射到不同类型的vector。boost::ptr_mapmemory_map;//...memory_map.insert(str_key,newVectorWrapper());这似乎有效。但是,当我将memory_map作为另一个类的成员并尝试将该类存储在std::map中时,编译失败。classAgentMemory{//...private:boost::ptr_mapmemory_map;};std::mapagent_map;//...agent_map.