草庐IT

weak_ptr_cast

全部标签

c++ - duration_cast 怎么轮

如果我转换为更粗略的时间单位(例如std::chrono::minutes为std::chrono::hours),duration_cast将如何圆?例如,如果转换为std::chrono::hours,std::chrono::minutes(91)会变成什么值?2小时,1小时? 最佳答案 duration_cast总是向零舍入。IE。正值向下舍入,负值向上舍入。有关其他舍入选项,请参阅:http://howardhinnant.github.io/duration_io/chrono_util.htmlfloor、ceil和r

c++ - static_cast 转换构造函数 vs 转换运算符

这个问题在这里已经有了答案:Shouldn'tthiscodethrowanambiguousconversionerror?(1个回答)关闭6年前。看完this我尝试使用static_cast进行此类转换:classA;classB{public:B(){}B(constA&)//conversionconstructor{cout(a);return0;}我预计它不会编译,因为构造函数和运算符都具有相同的c-v资格。然而,它编译成功,static_cast调用构造函数而不是运算符。为什么?(使用带有pedantic和Wall标志的gcc4.8.1编译)

c++ - 没有 RTTI 的 shared_ptr?

我正在尝试在使用xc321.34(gcc4.5.2的衍生物)构建的嵌入式项目中使用shared_ptr。该项目使用-fno-rtti禁用了RTTI。#include仅包含header会出现以下错误:/Applications/microchip/xc32/v1.34/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/Cpp/memory:Inmemberfunction'virtualvoid*std::tr1::_Ref_count_del::_Get_deleter(conststd::type_info

c++ - sibling 的 dynamic_cast 的用例是什么?

我正在阅读ScottMeyers的《更有效的C++》。教化!Item2提到dynamic_cast不仅可以用于向下转换,还可以用于兄弟转换。任何人都可以提供一个(合理的)非人为的例子来说明它对sibling的用法吗?这个愚蠢的测试按它应该打印0,但我无法想象任何用于此类转换的应用程序。#includeusingnamespacestd;classB{public:virtual~B(){}};classD1:publicB{};classD2:publicB{};intmain(){B*pb=newD1;D2*pd2=dynamic_cast(pb);cout

c++ - 当在类主体中使用 unique_ptr 声明析构函数作为同一类的成员时出现编译器错误

下面是代码的极简问题:structB{B()=default;//~B(){};//error:useofdeletedfunction‘B&B::operator=(constB&)’std::unique_ptrm_pB=nullptr;};intmain(){std::vectorvB;vB.erase(vB.begin());}除非取消注释析构函数,否则以上代码可以正常编译。根据我的要求,我需要一个~B()的正文明确定义。如何使用unique_ptr定义析构函数的主体?同类共存?注意:尝试定义=default复制和移动构造函数的版本无济于事。在我的真实代码中,unique_pt

c++ - 使用 shared_ptr 和 weak_ptr 时避免间接循环引用

我目前正在组装一个严重依赖shared_ptr的应用程序,到目前为止一切看起来都很好-我已经完成了我的homework并且非常清楚使用shared_ptr的一些陷阱shared_ptr最常见的问题之一是循环依赖-这些问题可以通过存储weak_ptr来解决,这些weak_ptr不会影响上链对象的生命周期.但是,我很难理解需要通过weak_ptr存储指向外部对象的指针的时间-我不确定它是否被禁止、不鼓励,或者是否这是安全的。下图描述了我的意思(黑色箭头表示shared_ptr;虚线表示weak_ptr):alttexthttp://img694.imageshack.us/img694/6

c++ - 为什么我不能在 Exception 类中有 auto_ptr

我在异常类中遇到了auto_ptr的问题,我最终将其简化为:#includeclassMyException{std::auto_ptrm_foo2;};intmain(){try{throwMyException();}catch(constMyException&){}return0;}编译失败:/perforce/unstable/test/Common/Exceptions/TestException4.cpp:Infunction'intmain()':/perforce/unstable/test/Common/Exceptions/TestException4.cpp:1

c++ - 将 ptr 显式转换为 "ptr to a ptr"

我在一次采访中看到了这段代码。intmain(){int**p;p=(int**)newint(7);cout我原以为*p会出现一些运行时错误。但是当我运行代码时,它成功执行并输出“0x7”。有人可以向我解释这是如何工作的吗?谢谢。 最佳答案 正确的答案是以上都不是,除非给你一些额外的限制。基本上,代码分配一个int并将该内存解释为一个int*(通过reinterpret_cast)。第一个问题是,作为一个reinterpret_cast,结果在一般情况下是unspecified,如果int的大小小于int*的大小(考虑64位架构)

c++ - 带有参数 std::unique_ptr<T>&& 的 std::move 或 std::forward

我有以下模板类(精简后只包含相关部分)和一个名为Push的方法用C++11编写:templateclassCircularStack{private:std::array,Capacity>_stack;public:voidPush(std::unique_ptr&&value){//somecodeomittedthatupdatesan_indexmembervariable_stack[_index]=std::move(value);}}我的问题是:ShouldIbeusingstd::moveorstd::forwardwithinPush?我不确定std::unique_

c++ - 使用 C++ 样式转换从 Void* 转换为 TYPE*​​ : static_cast or reinterpret_cast

因此,如果您从Void*转换为Type*或从Type*转换为Void*,您应该使用:voidfunc(void*p){Params*params=static_cast(p);}或voidfunc(void*p){Params*params=reinterpret_cast(p);}对我来说static_cast似乎更正确,但我已经看到两者用于同一目的。此外,转换的方向是否重要。即我是否仍应将static_cast用于:_beginthread(func,0,static_cast(params)我已经阅读了关于C++样式转换的其他问题,但我仍然不确定这种情况下正确的方法是什么(我认为