草庐IT

auto-ptr

全部标签

c++ - 为什么 unique_ptr 不阻止自定义删除器的切片?

std::unique_ptr与自定义删除器的行为基于删除器的静态类型.没有多态性,没有基于运行时传递的实际删除器的运行时行为,因为提供的派生删除器被切片为声明的删除器的静态类型。(Itisdesignedthiswayinpurpose,toallowthesizeofunique_ptrwithdefaultdeleterorwithcustomdeleterwithoutanydatamembers,tohavesamesizeasarawpointer).带有自定义删除器的unique_ptr的静态行为:classA{};structBaseDeleter{virtualvoi

c++ - 帮助在 std::map 中存储模板类的 intrusive_ptr

我在boost::intrusive_ptr中包含一个Locker类型的小模板类,我想将其存储在std::map中:templateboolLockerManager::AddData(conststd::string&id,T*pData){boost::intrusive_ptr>lPtr(Locker(pData));//Line359-compilesmMap.insert(make_pair(id,lPtr));//Line361-giveserror}Locker只是一个容器类;它的构造函数看起来像:templateLocker::Locker(T*pData):Intru

c++ - 警告 : auto-importing has been activated without --enable-auto-import specified on the command line

我的环境:QtCreator2.3.1Qt4.7.4(32位)Windows7旗舰版(64位)尝试在QtforWindows中重建项目时,我遇到以下编译器警告:warning:auto-importinghasbeenactivatedwithout--enable-auto-importspecifiedonthecommandline.Thisshouldworkunlessitinvolvesconstantdatastructuresreferencingsymbolsfromauto-importedDLLs.发出此警告的项目包含一个DLL文件。尽管有警告,DLL中的类和函数

c++ - 为什么在单例实现中清除 boost::scoped_ptr

我使用boost::scoped_ptr实现了一个简单的单例:templateclassSingleton:publicboost::noncopyable{public:staticT&instance(){boost::call_once(init,flag);return*t;}staticvoidinit(){t.reset(newT());}private:staticboost::scoped_ptrt;staticboost::once_flagflag;};templateboost::scoped_ptrSingleton::t(0);templateboost::o

c++ - Boost Asio - 使用 shared_ptr 处理解析器和套接字

我有一个类能够通过TCP发送消息。这里是简化的界面:classCommandScreenshot:publicCameraCommand{public:CommandScreenshot();~CommandScreenshot();voidDispatch(boost::shared_ptrio_service);private:voidresolve_handler(constboost::system::error_code&err,boost::asio::ip::tcp::resolver::iteratorendpoint_iterator);};如您所见,我有一个函数Di

c++ - 将 unique_ptr 插入 map ,指针被销毁

我有以下(简化的)类(class):classOperator{private:std::map>op;public:templatevoidinsertOperand(std::stringconst&s,To=T()){op.insert(std::pair>(s,std::move(std::unique_ptr(newT(o))));}voidsetOperandsValue(std::stringconst&o,intv){op.find(o)->second->setValue(v);}};插入一个新的Operand没有任何问题。然而,当函数返回时,析构函数被调用,因此ma

c++ - QMap 和 std::unique_ptr

我试图防止裸指针,防止内存泄漏等。我还想将int映射到INuiSensor*.由于我也在使用Qt,所以我尝试使用QMap>来执行此操作,但QMap的源代码使这变得不可能:templateQ_INLINE_TEMPLATEtypenameQMap::iteratorQMap::insert(constKey&akey,constT&avalue){detach();Node*n=d->root();Node*y=d->end();Node*last=0;boolleft=true;while(n){y=n;if(!qMapLessThanKey(n->key,akey)){last=n;

C++ ptr_fun 找不到 void 参数化函数

我尝试使用std::ptr_fun来包装我的函数,但是当我尝试使用void参数和bool返回类型来包装一个函数时,我得到了一个错误:代码:std::functioncr=std::not1(std::ptr_fun(&funct1));功能:boolfunct1(){returnfalse;}错误:error:nomatchingfunctionforcallto'ptr_fun(bool(*)())'但每当我将参数更改为int时,问题似乎就消失了。如何使用void参数包装函数? 最佳答案 std::ptr_fun仅适用于一元函数:

c++ - Visual Studio 2013 C++ - 将 std::unique_ptr 传递给绑定(bind)函数

使用VisualStudio2013RC和C++,我尝试将std::unique_ptr传递给已使用std::bind绑定(bind)的函数。但是,我遇到了麻烦,因为当我尝试这个时VS似乎不喜欢它。这是我要编译的内容:#include#include#includevoidfunc(std::unique_ptrarg){std::cout)>bound=std::bind(&func,std::placeholders::_1);std::unique_ptrptr(newint(42));bound(std::move(ptr));return0;}这可以在GCC4.8.1中编译,

c++ - 试图理解 auto_ptr

我试图了解有关auto_ptr类如何工作的某些细节。假设您有以下类(class)(我是在一个网站上找到的,该网站上有人解释了赋值运算符的要点)。classTFoo:publicTSuperFoo{auto_ptrfBar1;auto_ptrfBar2;public:TFoo&TFoo::operator=(constTFoo&that);//variousothermethoddefinitionsgohere...}现在是赋值运算符的实现。TFoo&TFoo::operator=(constTFoo&that){if(this!=&that){auto_ptrbar1=newTBar