草庐IT

weak_ptr_cast

全部标签

c++ - scoped_ptr 所有权

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:WhatisasmartpointerandwhenshouldIuseone?我正在阅读anarticle我找到了一个小例子来演示boost::scoped_ptr的使用:#include#include#include#includestaticintcount=0;classprinter{intm_id;public:printer(void):m_id(count++){}~printer(void){std::coutp1(newprinter);boost::scoped_ptrp2(newpri

c++ - 如果与指针一起使用,dynamic_cast 何时会抛出异常?

我在源代码中使用dynamic_cast将指针转换为如下所示,Base*base=herestoringthepointer;Derived*derived=dynamic_cast(base);如果base没有类层次结构的指针,则转换失败并返回NULL。在接下来的几行中,我正在检查NULL。所以没问题。我遇到了故障转储,我的应用程序由于dynamic_cast抛出异常而崩溃。我知道dynamic_cast只有在与引用类型一起使用时才会抛出异常。知道当我在上面的源代码中使用指针时,dynamic_cast会抛出异常吗? 最佳答案 A

c++ - 使用 dynamic_cast 转换 const 类

我想投这个:classBase{public:virtual~Base(){};};classDer:publicBase{};intmain(){constBase*base=newDer;Der*der=dynamic_cast(base);//Errorreturn0;}我该怎么办?我试着输入:constDer*der=dynamic_cast(base);维护常量,但这不起作用。 最佳答案 试试这个:constDer*der=dynamic_cast(base);dynamic_cast无法删除const限定符。您可以使用c

c++ - 为什么需要一个空的 shared_ptr 以及如何使用它?

在ScottMeyers的EffectiveC++中,第18项使接口(interface)易于正确使用且难以错误使用,他提到了nullshared_ptr:std::tr1::shared_ptrpInv(static_cast(0),getRidOfInvestment)和时尚分配操作pInv=...//makeretValpointtothecorrectobject在哪种情况下可能需要创建一个空的shared_ptr并稍后进行赋值?为什么不只要有资源(原始指针)就创建shared_ptr?由于ScottMeyers没有在前面的示例中显示完整的赋值,我认为shared_ptr的赋值

c++ - 错误 : cannot dynamic_cast . ..(目标不是指针或引用)

我正在学习C++中的异常处理并遇到了问题。这是代码:#include#includeusingnamespacestd;classA{public:virtualvoidf(void){}};classAA:publicA{public:voidaa(void){};};intmain(void){Aa;try{dynamic_cast(a).aa();}catch(exceptionex){cout所以我以为trycatch会让函数执行并告诉我异常的内容,但是我的编译器没有编译它。我在GNUGCC中使用代码块。请帮助我并告诉我我需要做什么才能让代码按预期运行。非常感谢。

c++ - 在没有 const_cast 的情况下修改 *this 的 const 方法

我正在编写的程序中出现了以下模式。我希望它不是太做作,但它设法改变了Fooconst方法中的对象Foo::Questionable()const,不使用任何const_cast或类似的。基本上,Foo存储对FooOwner的引用反之亦然,在Questionable(),Foo设法通过调用mutate_foo()在const方法中修改自身在它的主人身上。问题遵循代码。#include"stdafx.h"#includeusingnamespacestd;classFooOwner;classFoo{FooOwner&owner;intdata;public:Foo(FooOwner&ow

c++ - 每次我想在基本类型之间进行转换时,我真的应该使用 static_cast 吗?

这是什么原因longl=1;charc=static_cast(l);floatf=1.0f;inti=static_cast(f);比这更好longl=1;charc=(char)l;floatf=1.0f;inti=(int)f;当将一种原始数据类型转换为另一种时?我有很多在类似情况下使用第二种样式进行类型转换的遗留代码,所以这也是一个关于我是否应该对该代码进行全面修订的问题。 最佳答案 面向future。假设将来我这样做:floatblah=1.0f;float*f=&blah;现在,inti=static_cast(f);停

c++ - 为什么使用 static_cast<int>(x) 而不是 (int)x?

我听说static_cast函数应该比C风格或简单函数风格的转换更受欢迎。这是真的?为什么? 最佳答案 主要原因是经典的C转换不区分我们所说的static_cast()。,reinterpret_cast(),const_cast(),和dynamic_cast().这四件事完全不同。Astatic_cast()通常是安全的。语言中有一个有效的转换,或者一个适当的构造函数使它成为可能。唯一有点冒险的时候是当你向下转换到一个继承的类时;您必须通过语言外部的方式(如对象中的标志)确保该对象实际上是您声称的后代。dynamic_cast(

c++ - 通过 const_cast 修改 const std::vector<T> 的元素

下面的程序是否有未定义的行为?#include#includestructFoo{conststd::vectorx;};intmain(){std::vectorv={1,2,3};autof=newFoo{v};const_cast(f->x[1])=42;//Legal?std::coutx[1]请注意,它不是使用const_cast从f->x中剥离常量,而是从f->中剥离常量x[x],大概由一个单独的数组表示。或者是否允许翻译假定f->x[1]在创建后是不可变的? 最佳答案 您的示例中没有未定义的行为。上面的代码不会调用未定

c++ - 关于 shared_ptr 析构函数中实现错误的困惑

我刚看到HerbSutter的演讲:C++andBeyond2012:HerbSutter-atomicWeapons,2of2他展示了std::shared_ptr析构函数实现中的错误:if(control_block_ptr->refs.fetch_sub(1,memory_order_relaxed)==0)deletecontrol_block_ptr;//B他说,由于memory_order_relaxed,delete可以放在fetch_sub之前。At1:25:18-Releasedoesn'tkeeplineBbelow,whereitshouldbe这怎么可能?存在h