草庐IT

Shared_ptr

全部标签

c++ - 如果我想使用 std::shared_ptr,要包含哪个 header ?

这个问题在这里已经有了答案:Whereisshared_ptr?(4个回答)关闭9年前。在c++0x中,shared_ptr将从tr1移动到std。那么要包含哪个header来获取它呢?我正在使用g++4.5(ubuntu10.10) 最佳答案 您可以在中找到它现在。 关于c++-如果我想使用std::shared_ptr,要包含哪个header?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/qu

c++ - 为什么我不能在 C++14 的 lambda 中 move std::unique_ptr?

我想在lambda中传递一个原始指针,但如果未调用lambda,我不希望它被泄露。它看起来像这样:voidClean(std::unique_ptr&&list);voidf(int*list){thread_pool.Push([list=std::unique_ptr(list)]{Clean(std::move(list));//我在Clang3.7.0中遇到错误:error:bindingofreferencetotype'unique_ptr'toavalueoftype'unique_ptr'dropsqualifiers但我一开始没有看到任何限定词,尤其是被丢弃了。另外,

c++ - 为什么只有 char* 是 <Bad Ptr>,而不是其他数据类型?

我正在学习C++中的指针。例如在初始化指针时,double*pvalue1=nullptr;//okaychar*pvalue2=nullptr;//onlythissays,"0x00000000"(inthewatchwindowofVisualC++2010)int*pvalue3=nullptr;//okay为什么只有char类型指针给出BadPtr而其他指针类型没有?我现在不关心指向的值。我没有取消引用它们(这就是上面出现这些错误的原因)。我只是在查看这三个指针的监window口。 最佳答案 对于大多数指针类型,Visua

c++ - 删除函数 unique_ptr

我根本不明白错误输出,我写了一个生成它的类。用户队列.h#ifndefUSERQUEUES_H#defineUSERQUEUES_H#include#include#include#include"Job.h"classUserQueues{public:typedefstd::unique_ptrJobPtr;typedefstd::dequeJobDeque;public:UserQueues();voidprintDeques();voidaddToDeque(JobPtrjob,intqueueId);public:constuintQUEUE_QTY=3;private:st

c++ - 将 shared_ptr 隐藏在 typedef 后面是一种好的风格吗?

我想减少代码中的一些视觉噪音并将shared_ptr隐藏在typedef后面,如下所示:typedefboost::shared_ptrSomeLongClassPtr;所以这个:voidfoo(constboost::shared_ptr&a,boost::shared_ptr&b);变成这样:voidfoo(constSomeLongClassPtr&a,SomeLongClassPtr&b);另一方面,我担心我会降低代码的明确性。哪种风格更好? 最佳答案 鉴于std::string本身就是一个typedef,我认为你很好。我自

c++ - shared_dynamic_cast 和 dynamic_pointer_cast 的区别

谁能给我解释一下:shared_dynamic_cast和dynamic_pointer_cast来自Boost库?在我看来它们可能是等价的。 最佳答案 给定一个shared_ptr,这两个函数确实是等价的。区别在于shared_dynamic_cast仅适用于shared_ptr的,而dynamic_pointer_cast适用于任何类型的指针(通过重载)。这使您可以对任何指针concept执行动态转换,而不管该指针实际上是如何构成的:#include#includestructfoo{};structbar:foo{voidf(

c++ - 具有 std::unique_ptr 与 boost::ptr_container 的 STL 容器

有了c++11,我问自己是否可以替换c++11中的boost::ptr_containers。我知道我可以使用例如一个std::vector>,但我不确定这是否是一个完整的替代品。处理这些情况的推荐方法是什么? 最佳答案 我决定编写一个简短的程序,将一些多态对象放入一个容器中(通过指向堆的指针),然后将该容器与std::algorithm一起使用。我选择了std::remove_if只是一个例子。这是我将如何使用vector>:#include#include#includeclassAnimal{public:Animal()=d

c++ - enable_shared_from_this - 空的内部弱指针?

我正在使用enable_shared_from_this然后从Base继承.尝试使用shared_from_this()时在Derived的构造函数(不是初始化列表),我得到一个异常。原来内部弱指针为空,并不指向this一点也不。这怎么可能发生?我的另一个用例完全可以正常工作。我什至不知道从哪里开始。我低头看了enable_shared_from_this的源码,在我看来,该指针始终为nullptr。 最佳答案 您不能在对象的构造函数中调用shared_from_this()。shared_from_this()要求对象由至少一个s

c++ - unique_ptr & vector,试图访问已删除的函数,Visual Studio 2013

我正在尝试使用unique_ptr来管理我的内存,而VS2013似乎在我认为不应该的时候给我带来了麻烦。似乎编译器出于某种原因试图访问已删除的复制构造函数,而它确实没有理由这样做。这是我的一门课的样子:classMesh{public:Mesh(oglplus::Program*program,conststd::vector&vertices,conststd::vector&indices);voiddraw();private:constoglplus::Program*_program;std::vector_vertices;std::vector_indices;oglpl

c++ - 为什么构造函数调用异常后没有释放unique_ptr?

在以下代码中:#include#includevoidmydeallocator(int*x){std::cerr>x;Foo(boolfail):x(newint(1),mydeallocator){if(fail)throwstd::runtime_error("Wefailhere");}};intmain(){{autofoo1=Foo(false);}{autofoo2=Foo(true);}}当调用Foo(true)时,似乎没有正确释放内存。也就是说,当我们编译并运行这个程序时,我们得到了结果:Freeingmemoryterminatecalledafterthrowin