草庐IT

weak_ptr_cast

全部标签

c++ - 在 Visual C++ 2010 上哪个更快 - std::shared_ptr 或 boost::shared_ptr?

有没有人在Release模式构建中测试过这个?还是实现如此相似而没有显着差异?我对速度感兴趣:创建一个新的shared_ptr创建shared_ptr的拷贝取消引用指针以访问指针对象这将在一个针对速度优化的发布版本中,使用make_shared()创建新的shared_ptr 最佳答案 好的,看来没有人这样做过。以下是我使用WIN32控制台应用程序的标准VC10优化设置发现的内容:VisualC++2010SP1std::make_shared和std::shared_ptr在填充包含1000万个指针条目的vector时比等效的Bo

c++ - 在 for range 循环中迭代包含 vector 的取消引用的 unique_ptr

为什么这段代码不像我想象的那样工作?for(autoit:*std::make_unique>(std::vector({1,2,3,4,5})))std::coutvector对象在执行循环的第一次迭代之前被销毁 最佳答案 range-basedforloop相当于:{init-statementauto&&__range=range_expression;...}对于您的range_expression,它将是auto&&__range=*std::make_unique>(std::vector({1,2,3,4,5}));但

c++ - floor 和 duration_cast 有什么区别?

所以在c++11Chrono图书馆提供,duration_cast:Computationsaredoneinthewidesttypeavailableandconverted,asifbystatic_cast,totheresulttypeonlywhenfinished和c++17的floor:ReturnsthegreatestdurationtrepresentableinToDurationthatislessorequaltod所以对于所有x这两个调用的结果是否相等:chrono::duration_cast(x)chrono::floor(x)

c++ - static_cast 的指针值

在当前标准草案(和C++17)中,this是关于static_castingvoid*的:Aprvalueoftype“pointertocv1void”canbeconvertedtoaprvalueoftype“pointertocv2T”,whereTisanobjecttypeandcv2isthesamecv-qualificationas,orgreatercv-qualificationthan,cv1.IftheoriginalpointervaluerepresentstheaddressAofabyteinmemoryandAdoesnotsatisfytheali

c++ - 地址、reinterpret_cast 和多重继承

任何人都可以解释以下代码的行为吗?为什么在第一种情况下我们有b=3,即b2==&d为真?为什么在案例2中没问题?b2和d的地址我打印出来了,它们是不一样的。#includeusingnamespacestd;classA{public:A():m_i(0){}protected:intm_i;};classB{public:B():m_d(0.0){}protected:doublem_d;};classC:publicA,publicB{public:C():m_c('a'){}private:charm_c;};intmain(){Cd;B*b2=&d;cout(b2)==rein

c++ - 关于c++中const_cast的问题

全部:这是引用自EffectiveC++第三版const_castistypicallyusedtocastawaytheconstnessofobjects.ItistheonlyC++-stylecastthatcandothis.我的问题是const_cast可以为非const对象添加常量吗?其实我写了一个小程序来验证我的想法。classConstTest{public:voidtest(){printf("callingnon-constversiontestconstfunction\n");}voidtest()const{printf("callingconstversi

c++ - 如何将派生类的 shared_ptr vector 转换为基类的 shared_ptr vector

classInterface{};classClass:publicInterface{};classFoo{public:std::vector>&GetInterfaces(){return*(std::vector>*)(&m_data);//returnm_data;}private:std::vector>m_data;};这行得通,但又丑又吓人。有更好/更安全的方法吗?我不想做m_data类型std::vector>因为模块Foo完全属于Class作品的,Interface(和Foo::GetInterfaces())被实现为与一个单独的模块交互,该模块应该只知道Inter

c++ - reinterpret_cast 与 static_cast 用于在标准布局类型中写入字节?

我需要写入某些整数类型的单个字节。我应该使用reinterpret_cast,还是应该通过void*使用static_cast?(一)unsignedshortv16;char*p=static_cast(static_cast(&v16));p[1]=...somecharvaluep[0]=...somecharvalue或(b)unsignedshortv16;char*p=reinterpret_cast(&v16);p[1]=...somecharvaluep[0]=...somecharvalue根据static_castandreinterpret_castforstd:

c++ - 在 C++ 中创建 vector 的 shared_ptr

这个问题在这里已经有了答案:Callinginitializer_listconstructorviamake_unique/make_shared(2个答案)关闭6年前。在现代C++中,我们可以像这样初始化一个vector:std::vectorv={1,2,3,4,5};但是如果我尝试创建一个指向vector的智能指针,这将无法编译:autov=std::make_shared>({1,2,3,4,5});有没有比在创建后求助于push_back更好的选择?

c++ - 为什么 unique_ptr 析构函数的异常会终止程序?

看看这段代码,它导致程序在未捕获异常的情况下终止。#include#include#include#includeusingnamespacestd;structtest{~test()noexcept(false){throwruntime_error("-my-cool-exception-");}};intmain(){try{autoptr=unique_ptr(newtest());//testt;//thisisok,withoutunique_ptritworksfine.}catch(exception&e){cout这个问题不同于堆栈溢出问题:throwingexce