草庐IT

dynamic_ptr_cast

全部标签

c++ - 未初始化 auto_ptr 时 get() 是否可靠?

考虑以下代码:std::auto_ptrp;if(p.get()==0){...}get()成员函数是否是检查p是否未初始化的标准且可靠的方法?无论平台、编译器、编译器的优化标志等如何,它总是返回0吗? 最佳答案 不存在未未初始化的std::auto_ptr,defaultconstructor将指针初始化为0:explicitauto_ptr(X*p=0);因此get()将在默认构造的std::auto_ptr上有效地返回“0”。 关于c++-未初始化auto_ptr时get()是否可

c++ - 将 shared_ptr 与 char* 一起使用

我无法创建:shared_ptrn_char=make_shared(newchar[size_]{});如何创建char*chr=newchar[size_]{};使用现代指针? 最佳答案 shared_ptrn_char=make_shared(newchar[size_]{});make_shared在内部调用new,因此您永远不会同时使用两者。在这种情况下,您只需调用new,因为make_shared不适用于数组。但是,你仍然需要让它调用正确的删除:C++17之前:您需要明确指定删除器。std::shared_ptrptr(

c++ - 对相同(原始)类型的 static_cast 会产生任何代码吗?

我想这一切都在标题中说了...但这是一个例子。给定voidfunctionThatTakesAFloat(floatpar);floatf=3.5f;做functionThatTakesAFloat(static_cast(f));与相比产生任何额外的代码functionThatTakesAFloat(f);或者这个static_cast是否被编译器完全消除了?编辑:我正在使用VC++(2010) 最佳答案 5.2.9/-2-AnexpressionecanbeexplicitlyconvertedtoatypeTusingasta

c++ - static_cast<char*> 和 (char*) 之间的区别

这是我的第一个问题:)我有一堆文件,我打开它如下图所示;ifstreamin(filename,ios::binary|ios::in)然后,我希望在unsignedinthold中保存2个字节的数据;unsignedinthold;in.read(static_cast(&hold),2);这对我来说似乎是正确的。但是,当我用编译它时g++-ansi-pedantic-errors-Werror--Wall-omainmain.cpp编译器报错error:invalidstatic_castfromtype‘unsignedint*’totype‘char*’其实我已经通过将stat

c++ - 初始化 shared_ptr 成员变量,new vs make_shared?

当初始化一个shared_ptr成员变量时://.hclassCustomer{public:Customer();private:std::shared_ptrsomething_;}//.cppCustomer():something_(newOtherClass()){}对比Customer():something_(std::make_shared()){}是否允许使用make_shared版本?我似乎总是看到第一个版本,哪个是首选? 最佳答案 不允许make_shared的唯一时间是:如果您得到一个由其他人分配的裸指针并将

c++ - 这个 unique_ptr 的初始化有什么问题?

有人能告诉我,unique_ptr的以下初始化有什么问题吗?intmain(){unique_ptrpy(nullptr);py=newint;....}g++-O2xxx.cc-lm-oxxx-std=c++11说:error:nomatchfor‘operator=’(operandtypesare‘std::unique_ptr’and‘int*’)py=newint;^做unique_ptrpx(newint);工作得很好。 最佳答案 两段代码的初始化都很好,unique_ptr有constructors对于nullptr和

c++ - 为什么这个 auto_ptr 的 dynamic_cast 会失败?

#include"iostream"classA{private:inta;public:A():a(-1){}intgetA(){returna;}};classA;classB:publicA{private:intb;public:B():b(-1){}intgetB(){returnb;}};intmain(){std::auto_ptra=newA();std::auto_ptrb=dynamic_cast>(a);return0;}错误:不能dynamic_cast`(&a)->std::auto_ptr::get()const 最佳答案

c++ - 结合 boost::lexical_cast 和 std::transform

我想写这样的东西,不能编译:std::vectoras;std::vectorbs(as.size());std::transform(as.beginn(),as.end(),bs.begin(),boost::lexical_cast);但这行不通,所以我创建了一个仿函数来为我做这件事:templatestructlexical_transform{templateDestoperator()(constSrc&src)const{returnboost::lexical_cast(src);}};有更简单的方法吗? 最佳答案

c++ - 如何将 boost::shared_ptr 引入现有(大型)C++ 代码库?

我目前正尝试通过引入智能指针的使用来修复我们代码库中的一些弱点。代码库非常庞大,并且相互关联,就像一只喝过一对多咖啡的蜘蛛。我想知道以前是否有人尝试过,他们的方法是什么。我的第一步是typedef类,如下所示。#ifndefUSE_SMART_POINTERS#defineUSE_SMART_POINTERS0#endif#ifUSE_SMART_POINTERS==1#include#endifnamespaceProductX{//forwarddeclerationclassCTObject;//typedefs#ifUSE_SMART_POINTERS==1typedefboo

c++ - 如何实现 std::auto_ptr 是复制构造函数?

回到我的疯狂AutoArraythingy...(从那里引用重要的部分:classAutoArray{void*buffer;public://CreatesanewemptyAutoArrayAutoArray();//std::auto_ptrcopysemanticsAutoArray(AutoArray&);//Noteitcan'tbeconstbecausethe"other"reference//isnull'doncopy...AutoArray&operator=(AutoArray);~AutoArray();//Nothrowswap//Note:Atthemom