草庐IT

gray8_ptr_t

全部标签

c++ - 如何转移 boost::ptr_vector 元素的所有权?

#include#includeusingnamespacestd;usingnamespaceboost;structA{~A(){coutv;v.push_back(newA);A*temp=&v.front();v.release(v.begin());deletetemp;return0;}输出:deleted0x300300deleted0x300300c(6832)malloc:***errorforobject0x300300:doublefree 最佳答案 ptr_vector::release返回ptr_vecto

c++ - 如何防止任何人窃取我的 shared_ptr?

因此,我使用boost::shared_ptr来获得它提供的所有各种引用计数优势——显然是初学者的引用计数,还有复制、分配并因此存储在STL容器中的能力。问题是,如果我只将它传递给一个“恶意”函数或对象,该对象可以保存ptr,然后如果外部函数或对象没有很好地放弃其所有权,我将永远无法取消分配它.最终,我尽量明确对象所有权。我通过让所有者保留对象的唯一shared_ptr来实现这一点,而“guest”对象仅将weak_ptr存储到对象。我真的不想要shared_ptr的“共享”部分,但我必须使用shared_ptr才能生成weak_ptr。我想使用scoped_ptr,但它非常有限,因为

c++ - 在构造函数中初始化 Boost shared_ptr

我有一个类,它有一个boost::asio::io_service对象。我希望这个对象存储在boost::shared_ptr中。所以我的标题看起来像这样(我去掉了所有不必要的代码,这样就不会分散注意力)classCommandDispatcher{private:boost::shared_ptrm_ioservice;public:CommandDispatcher();};当我现在创建CommandDispatcher的对象时,我希望为指针初始化一个io_service对象。现在我不太清楚该怎么做。我查找了两种不同的解决方案,但只有一种有效,我不太确定它是否合适。但是你自己看看:

c++ - 为什么 unique_ptr 有一个 nullptr_t 构造函数?

我不清楚有什么好处。如果我有:Foo*foo=nullptr;std::unique_ptrunique_foo(foo);在那种情况下是否调用了nullptr_t构造函数?或者仅当您这样做时:std::unique_ptrunique_foo(nullptr);谢谢!有一些讨论here这是为了允许你传入nullptr_t,否则它不会编译,因为它不会转换为类型指针。所以我的问题可能是为什么它不转换? 最佳答案 一个可能的原因是采用unique_ptr::pointer参数的unique_ptr构造函数是显式。这意味着在没有uniqu

c++ - std::unique_ptr 是 RAII 的应用吗?

这是对它的准确描述吗?有道理吗?您是否保证在unique_ptr超出范围之前它指向的对象不会被删除[即使您没有使用unique_ptr]? 最佳答案 是的,std::unique_ptr遵循RAII设计原则。不,std::unique_ptr不会阻止其他代码做一些愚蠢的事情,比如在属于unique_ptr的指针上调用delete>。unique_ptr本身将在其拥有的对象上调用deleter1,当出现以下任一情况时:超出范围或unique_ptr被重新分配(通过operator=或reset)以指向不同的对象还可以通过移动到不同的智

c++ - std::auto_ptr、delete[] 和泄漏

为什么这段代码不会导致内存泄漏?intiterCount=1000;intsizeBig=100000;for(inti=0;ibuffer(newchar[sizeBig]);}WinXPsp2,编译器:BCB.05.03 最佳答案 因为你(不)幸运。auto_ptr调用delete,而不是delete[]。这是未定义的行为。尝试做这样的事情,看看你是否幸运:structFoo{char*bar;Foo(void):bar(newchar[100]){}~Foo(void){delete[]bar;}}intiterCount=1

【C++】【图像处理】形态学处理(腐蚀、膨胀)算法解析(以.raw格式的图像为基础进行图像处理、gray levels:256)

1voiderosion(BYTE*image,intw,inth,BYTE*outImg)2{3intrept;4//腐蚀5memcpy(outImg,image,sizeof(BYTE)*w*h);//将读取的图像赋值给outImg,方便进行腐蚀操作67inti,j,m,n;8BYTEflag;9for(rept=0;rept3;rept++)//进行三次腐蚀or膨胀操作10for(i=1;i1;i++)11for(j=1;j1;j++)12if(image[i*w+j]==255){//当前灰度级为255时(即白色),则对该点的3x3邻域像素点进行遍历13flag=0;//记录该邻域中,

c++ - 为什么我会收到编译错误 "use of deleted function ' std::unique_ptr ...”

我收到一个巨大的编译错误信息c:\mingw\include\c++\6.1.0\bits\predefined_ops.h:123:18:error:useofdeletedfunction'std::unique_ptr::unique_ptr(conststd::unique_ptr&)[with_Tp=Deduction;_Dp=std::default_delete]'{returnbool(_M_comp(*__it1,*__it2));}当我将自定义比较器传递给STLset_difference函数时。我的代码:structValue{std::stringded_cod

c++ - boost::shared_ptr 和分配派生类

假设DerivedClass派生自BaseClass以下是否可行?boost::shared_ptra(newBaseClass());boost::shared_ptrb(newDerivedClass());a=b;关注此question,我知道现在a指向派生,b指向基数(对吗?)此外,现在如果我通过a调用函数,它会调用派生实现吗? 最佳答案 ...a=b;您正在重新分配给a,因此a和b现在都指向DerivedClass对象。BaseClass对象将被销毁,因为此时它的引用计数将为零(由于a被重新分配以指向不同的对象)。由于a现

C++ 静态类和 shared_ptr 内存泄漏

我不明白为什么下面的代码会产生内存泄漏(我正在使用boost::shared_ptr和静态类实例)。有人可以帮助我吗?#include#includeusingboost::shared_ptr;#define_CRTDBG_MAP_ALLOC#defineNEWnew(_NORMAL_BLOCK,__FILE__,__LINE__)staticstructmyclass{staticshared_ptrptr;myclass(){ptr=shared_ptr(NEWint);}}myclass_instance;shared_ptrmyclass::ptr;intmain(){_Cr