草庐IT

c++ - eclipse 中的 unique_ptr 自动完成

我正在玩unique_ptr。在我的lastpost人们通过在编译期间指定-std=c++0x帮助我编译了一个使用此指针的程序。现在我想知道是否有任何方法可以指示eclipse在自动完成时考虑c++11?unique_ptr不在std::命名空间的列表中,我也找不到与unique_ptr关联的方法(重置、移动...)。谢谢瓦赫德 最佳答案 “内存”头文件(可能位于/usr/include/c++/4.9/memory)仅包含“unique_ptr.h”和“shared_ptr.h”(可能位于/usr/include/c++/4.9/

c++ - 我怎么知道谁持有 shared_ptr<>?

我使用boost::shared_ptr在我的C++应用程序中。内存问题真的很严重,应用程序占用大量内存。但是,因为我将每个新对象放入shared_ptr,当应用程序退出时,不会检测到内存泄漏。必须有std::vector>之类的东西持有资源的池。我怎么知道谁持有shared_ptr,什么时候调试?很难逐行查看代码。代码太多... 最佳答案 仅通过查看shared_ptr,您无法知道“兄弟指针”在哪里。您可以测试一个是否为unique()或获取use_count(),其中othermethods.

c++ - 在库的公共(public)接口(interface)中使用 boost::shared_ptr

我们有一个C++库,我们提供给几个不同的客户。最近,我们从在公共(public)接口(interface)中使用原始指针切换到使用boost::sharedptr。正如您可能猜到的那样,这提供了巨大的好处,因为现在客户不再需要担心谁需要删除什么以及何时删除。当我们进行转换时,我认为这是正确的做法,但让我感到困扰的是,我们必须在我们的公共(public)界面中包含来自第三方库的东西——通常,如果可以的话,你会避免这种事情。我合理化了boost现在实际上是C++语言的一部分,我们的用例要求客户端代码和库都保存指向对象的指针。然而最近我们的一个客户问我们是否可以切换到在接口(interfac

c++ - 在 VS1012 中使用 std::move 将 std::unique_ptr 发送到 std::thread

在VisualStudio2012中出现以下错误。voiddo_something(std::unique_ptri);std::unique_ptri(newint);std::thread(do_something,std::move(i));Error3errorC2248:'std::unique_ptr::unique_ptr':cannotaccessprivatememberdeclaredinclass'std::unique_ptr'c:\programfiles(x86)\microsoftvisualstudio11.0\vc\include\functional

c++ - 从隐式转换中复制构造 shared_ptr 有什么问题?

考虑这个最小的例子:#includestructB{typedefstd::shared_ptrPtr;};structA{operatorB::Ptr(){//typeconversionoperator();//|}//|};//|//|intmain(){//|A*a=newA;//|B::Ptr{*a};//copyconstructionfroma'simplicitcasttoB::Ptr----+}shared_ptr的这种无辜的复制结构在g++4.6.3x86_64-linux-gnu上严重失败,但似乎适用于g++4.5(请注意,较新的版本中断,而较旧的版本有效!)。从

c++ - 嵌套的 shared_ptr 破坏导致堆栈溢出

这更像是一个设计问题(我知道为什么会这样,只是想看看人们如何处理它)。假设我有一个简单的链表struct:structList{inthead;std::shared_ptrtail;};shared_ptr允许在多个列表之间共享子列表。但是,当列表变得很长时,其析构函数中可能会发生堆栈溢出(由shared_ptrs的递归释放引起)。我尝试过使用显式堆栈,但这变得非常棘手,因为一个尾部可以由多个列表拥有。如何设计我的List来避免这个问题?更新:澄清一下,我不是在重新发明轮子(std::forward_list)。上面的List只是真实数据结构的简化版。真正的数据结构是一个有向无环图,

c++ - 通过weak_ptr创建单例类是否正确

我创建了一个父类来处理带有智能指针的单例模式:.h文件:templateclassSingleton{public:staticstd::shared_ptrGetInstance();private:staticstd::weak_ptrm_singleObject;};.cpp文件:templatestd::shared_ptrSingleton::GetInstance(){autoshareObject=m_singleObject.Lock();if(!shareObject){shareObject.reset(newsingleType);m_singleObject=s

c++ - 如果您始终将其存储在 shared_ptr 中,您的接口(interface)是否需要虚拟析构函数?

自从boost::/std::shared_ptr具有类型删除其删除器的优势,您可以做一些不错的事情,例如#includetypedefstd::shared_ptrgc_ptr;intmain(){gc_ptrp1=newint(42);gc_ptrp2=newfloat(3.14159);gc_ptrp3=newchar('o');}由于保存了正确的删除器,这将正确删除所有指针。如果您确保接口(interface)的每个实现总是使用shared_ptr创建(或make_shared),你真的需要virtual析构函数?我会宣布virtual无论如何,但我只想知道,因为shared_

c++ - C++11 中的 unique_ptr vector

我最近切换到C++11,并且正在尝试习惯那里的良好实践。我最终经常处理的是这样的:classOwner{private:vector>_vectorOfHeavyResources;public:virtualconstvector*GetVectorOfResources()const;};这需要我做一些事情,比如添加一个_returnableVector并翻译源vector以便以后能够返回它:_returnableVector=vector;for(inti=0;i有没有人注意到类似的问题?你的想法和解决方案是什么?我在这里得到了完整的所有权想法吗?更新:这是另一件事:如果一个类将

c++ - 我可以将 0 分配给 shared_ptr 吗?为什么?

我意识到在GCC4.7中可以正常编译:#includeintmain(){std::shared_ptrp;p=0;}但是,int或int*没有赋值运算符,int或都没有隐式构造函数>int*也可以。int*有一个构造函数,但它是显式的。我检查了标准库的实现,构造函数确实是显式的,看不到任何可疑的赋值运算符。程序实际上是格式正确的还是GCC搞砸了我? 最佳答案 之所以有效,是因为这个标准的简短引用:§4.10[conv.ptr]p1Anullpointerconstantisanintegralconstantexpression(