草庐IT

weak_ptr_cast

全部标签

c++11 - std::weak_ptr 什么时候有用?

我开始研究C++11的智能指针,但我看不到std::weak_ptr的任何有用用途。谁能告诉我std::weak_ptr什么时候有用/必要? 最佳答案 std::weak_ptr是解决danglingpointer的一个很好的方法。问题。通过仅使用原始指针,不可能知道引用的数据是否已被释放。相反,通过让std::shared_ptr管理数据,并将std::weak_ptr提供给数据的用户,用户可以通过调用expired()或lock().您不能单独使用std::shared_ptr来执行此操作,因为所有std::shared_ptr

c++ - 我们应该通过引用还是按值传递 shared_ptr ?

当函数采用shared_ptr(来自boost或C++11STL),你通过了吗:通过const引用:voidfoo(constshared_ptr&p)或按值:voidfoo(shared_ptrp)?我更喜欢第一种方法,因为我怀疑它会更快。但这真的值得吗?还是有其他问题?能否请您说明您选择的原因,或者如果是,您认为这无关紧要的原因。 最佳答案 Scott、Andrei和Herb在AskUsAnything期间讨论并回答了这个问题。sessionC++andBeyond2011.观看从4:34onshared_ptrperforma

c++ - 我们应该通过引用还是按值传递 shared_ptr ?

当函数采用shared_ptr(来自boost或C++11STL),你通过了吗:通过const引用:voidfoo(constshared_ptr&p)或按值:voidfoo(shared_ptrp)?我更喜欢第一种方法,因为我怀疑它会更快。但这真的值得吗?还是有其他问题?能否请您说明您选择的原因,或者如果是,您认为这无关紧要的原因。 最佳答案 Scott、Andrei和Herb在AskUsAnything期间讨论并回答了这个问题。sessionC++andBeyond2011.观看从4:34onshared_ptrperforma

(C++) 类与 static_cast 与 dynamic_cast

static_caststatic_cast相当于C语言里面的强制转换,适用于:用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。把空指针转换成目标类型的空指针。把任何类型的表达式转换成void类型。注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。dynamic_cast转换方式:

(C++) 类与 static_cast 与 dynamic_cast

static_caststatic_cast相当于C语言里面的强制转换,适用于:用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。把空指针转换成目标类型的空指针。把任何类型的表达式转换成void类型。注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。dynamic_cast转换方式:

std::weak_ptr<void>绑定到std::shared_ptr<T>

最近在忙自己的研究生科研工作和尽量在不看源码的情况下写一个玩具版的muduo(我已经看过陈硕的《Linux多线程服务端编程:使用muduoC++网络库》,相当于按自己的理解再写一遍),没太有时间写C++对象模型的后面部分,等组会开完后再继续写。今天就写一下几天前看到的一个小技巧,也即标题:std::weak_ptr绑定到所有类型的std::shared_ptr。std::weak_ptr我们知道weak_ptr目的是为了防止只使用std::shared_ptr导致的循环引用,从而导致内存泄漏。一个经典的例子如下:#include#include#include#includeclassChil

std::weak_ptr<void>绑定到std::shared_ptr<T>

最近在忙自己的研究生科研工作和尽量在不看源码的情况下写一个玩具版的muduo(我已经看过陈硕的《Linux多线程服务端编程:使用muduoC++网络库》,相当于按自己的理解再写一遍),没太有时间写C++对象模型的后面部分,等组会开完后再继续写。今天就写一下几天前看到的一个小技巧,也即标题:std::weak_ptr绑定到所有类型的std::shared_ptr。std::weak_ptr我们知道weak_ptr目的是为了防止只使用std::shared_ptr导致的循环引用,从而导致内存泄漏。一个经典的例子如下:#include#include#include#includeclassChil

【C#】尝试类型转换异常System.InvalidCastException: Specified cast is not valid.解决方案

由于对象是多态的,因此基类类型的变量可以保存派生类型。若要访问派生类型的方法,需要将值强制转换回该派生类型。不过,在这些情况下,如果只尝试进行简单的强制转换,会导致引发InvalidCastException的风险。这就是C#提供is和as运算符的原因。您可以使用这两个运算符来测试强制转换是否会成功,而没有引发异常的风险。通常,as运算符更高效一些,因为如果可以成功进行强制转换,它会实际返回强制转换值,转换不成功则返回null。而is运算符只返回一个布尔值。因此,如果只想确定对象的类型,而无需对它进行实际强制转换,则可以使用is运算符。as0bjecta=对象1;对象2b=aas对象1;(先将

【C#】尝试类型转换异常System.InvalidCastException: Specified cast is not valid.解决方案

由于对象是多态的,因此基类类型的变量可以保存派生类型。若要访问派生类型的方法,需要将值强制转换回该派生类型。不过,在这些情况下,如果只尝试进行简单的强制转换,会导致引发InvalidCastException的风险。这就是C#提供is和as运算符的原因。您可以使用这两个运算符来测试强制转换是否会成功,而没有引发异常的风险。通常,as运算符更高效一些,因为如果可以成功进行强制转换,它会实际返回强制转换值,转换不成功则返回null。而is运算符只返回一个布尔值。因此,如果只想确定对象的类型,而无需对它进行实际强制转换,则可以使用is运算符。as0bjecta=对象1;对象2b=aas对象1;(先将

static_cast和dynamic_cast

C++的强制类型转换,除了继承自C语言的写法((目标类型)表达式)之外,还新增了4个关键字,分别是:static_cast、dynamic_cast、const_cast和reinterpret_cast。用法:xxx_cast(表达式)。由于后两者的使用频率较少,尤其是reinterpret_cast的风险性很高,所以就不展开讲了。这里主要将static_cast和dynamic_cast。static_cast解释所谓static_cast,顾名思义,就是静态的转换,是在编译期间就能确定的转换。主要用途用于基本数据类型之间的转换。#includeusingnamespacestd;intm