关于C++ dynamic_cast转换需要引起重视的问题

记录一则线上bug 最近线上出现一次崩溃事故,core在了dynamic_cast类型转化上面,之前一直跑的好好的,第一反应是存在野指针了。void RoomHandler::KickAllPlayersInRoom(Room* room) { vector<IPlayer*> players = room->GetPlayers(); for (size_t i=0; i<players.size() 阅读详情
#include <iostream>

using namespace std;


class CBase {

public:
	virtual int b(){
		return 0;
	}
};
class CDerived: public CBase {

	int b(){
		return 0;
	}
};



int main(void)
{


	//知识点1
	//子类转基类没问题,因为空间变小,反之不行
	CBase b; CBase* pb;
	CDerived d; CDerived* pd;

	pb = dynamic_cast<CBase*>(&d);     // ok: derived-to-base

	//知识点2
	//注释掉CBase和CDerived的b函数,那么下面的语句编译不过
	//基类指针转子类指针需要基类为多态基类
	pd = dynamic_cast<CDerived*>(&b);  // wrong: base-to-derived
	//知识点3
	//  如果b指向的对象不是一个完整的对象,那么转换后,pd仍然可能会空
	//解引用之前需要对pd进行判断 if (0 == pd)
}


C++:类型转换和类型安全 C++:类型转换和类型安全简介隐式类型转换扩大转换(提升)收缩转换(强制)有符号到无符号的转换指针转换显式转换(强制转换) 简介 本文档确定了一些常见的类型转换问题,并介绍了如何在 C++ 代码中避免它们。 在编写 C++ 程序时,请务必确保它是类型安全的。 这意味着每个变量、函数自变量和函数返回值将存储一个可接受的类型的数据,并意味着涉及不同类型的值的操作“有意义”且不会导致数据丢失、位模式解释不正确或内存损坏。 从不显式或隐式地将值从一种类型转换为另一种类型的程序在定义上是类型安全的。 但是,有时需要进 阅读详情

相关推荐

sentinel滑动时间窗口算法学习

滑动时间窗口 先不说sentinel的算法实现,先说什么是滑动时间窗口, 我们在进行限流的时候,比如通过QPS进行限流,那假如我们以秒为单位,举个例子: 我设置了限流规则,qps是10 如果不使用滑动窗口算法,在统计qps的时候,就有可能会有问题,比如: 在0 - 500ms中的请求数是0,但是在500ms - 1000 ms的请求数是10;在1000ms - 1500ms 之间又进来了5个请求,此时只判断了1000ms - 2000 ms之间的请求数 因为没有把1S进行拆分多个窗口,所以在1000ms之后

小小少年的博客 3980

C++标准转换运算符dynamic_cast

dynamic_cast <new_type> (expression) dynamic_cast运算符,应该算是四个里面最特殊的一个,因为它涉及到编译器的属性设置,而且牵扯到的面向对象的多态性跟程序运行时的状态也有关系,所以不能完全的使用传统的转换方式来替代。但是也因此它是最常用,最不可缺少的一个运算符。 与static_cast一样,dynamic_cast的转换也需要...

weixin_30883271的博客 441

Python OpenCV基于颜色通道分离法去除图片中的红色印章

最近一段时间的工作都是研究如何去除图片中的红色印章,在网上查找了大量的大佬写过的方法,发现大多数是采取颜色通道分离法来做,并且效果还不错。站在前人的肩膀上,我又做了些许调整,谈不上是改进,但是能应对更对的情况总还是好的,特此记录。 拿发票做例子,印章相较于其它部分最大的不同就是印章是红色的,而其它部分不是(这是一句废话)。 那么第一步当然就是将红色分离出来,这一步可以采用Python第三方库OpenCV里的 cv2.split()方法,该方法是把RGB图像的三个通道拆分开来,得...

wl_Honest的博客 1万+

解决关于使用dynamic_cast而导致的程序崩溃的现象

dynamic_cast而导致的程序崩溃

威桑的博客 977

AppStore逆向分析:从网络抓包到自动化模拟的完整实践

在移动应用生态中,理解客户端与服务器之间的通信协议是进行自动化测试、数据分析和系统集成的关键技术基础。通过分析网络请求与响应,可以深入理解认证、会话管理和数据交换的原理,这对于构建稳定的自动化流程至关重要。其技术价值在于能够实现合法场景下的流程模拟,例如应用元数据监控、沙盒环境测试或内部工具开发。在实际应用场景中,开发者常需处理登录态维持、请求签名验证及风控策略应对等挑战。本文聚焦于AppStore这一封闭生态,详细拆解了其登录、查询等核心环节的通信机制,并探讨了使用Python结合抓包工具进行安全逆向分析

weixin_42524171的博客 926

【WILEY】wiley期刊投稿详解:从revision到Accepted全流程实例讲解

注意:包括没标注修改位置的word文件和标注了修改位置的word文件。

Everyday try to become better -Kobe Bryant 1万+

C++ dynamic_cast转换的弊端

dynamic_cast进行不匹配指针类型转换时,会返回

Helloguoke的专栏 1211

Cadence数模混合仿真实战:从Verilog到ADE L的完整流程解析

本文详细解析了Cadence数模混合仿真的完整流程,从Verilog代码编写到ADE L仿真环境配置。通过实战案例讲解如何创建Config文件、搭建混合信号原理图,并分享提高仿真效率的技巧和常见问题排查方法,帮助工程师掌握这一关键芯片设计验证技术。

weixin_29246195的博客 986

转:VC6.0中C4541号警告的原因以及解决方案 (dynamic_cast出错)

转:http://hi.baidu.com/nkhzj/blog/item/0c4ade167010a81b972b4307.html 今天在VC6.0中使用dynamic_castwarning C4541: dynamic_cast used on polymorphic type class MyObject with /GR-; unpredictable behavior

miyunhong的专栏 2252

深入理解Android音视频同步机制(三)NuPlayer的avsync逻辑

本文深入介绍了NuPlayer的avsync逻辑和原理

张晖的专栏 1万+

k8s问题处理

执行 kubectl api-resources 报错如下。

weixin_40548182的博客 944

C++的类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast

在C++中,存在类型转换,通常意味着存在缺陷(并非绝对)。所以,对于类型转换,有如下几个原则: (1)尽量避免类型转换,包括隐式的类型转换 (2)如果需要类型转换,尽量使用显式的类型转换,在编译期间转换 (3)避免使用reinterpret_cast和老式的强制类型转换操作符 通常,隐式的类型转换会导致警告,需要重视这些警告,并使用显式的类型转换代替,例如static_cast代替一些算术

Vast_Sea的专栏 507

【Kubernetes】怎么根据pod找到关联的deployment呢

在文章中我们删除pod需要删除deployment,那么怎么根据pod找到关联的deployment呢。

九师兄 505

C++学习之路-类型转换

这些转换类型符可能根本就用不到,但是要知道功能是啥,也就是说要能看懂别人写的代码。仅此而已。

weixin_45452278的博客 785

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

笔试题之三:C++ dynamic_cast问题

题目: 已知下面的class层次,其中每一个class都定义有一个default constructor和一个virtual destructor: class X {......}; class A {......}; class B : public A {......}; class C : public B {......}; class D : public X,...

weixin_30699741的博客 234

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Th3.10:RTTI、dynamic_cast、typeid简介

本博客将记录:类的相关知识点的第10节的笔记! 今天 总结的这5个知识点都是之前我coding中接触得非常少的,因此 今天总结的知识分为以下5个点: 一、RTTI是什么? 二、dynamic_cast运算符 三、typeid运算符 四、type_info类 五、RTTI与虚函数表 一、RTTI是什么? 所谓的RTTI(Run Time Type Identification):运行时类型识别。 具体一点就是:在程序运行时,程序能够使用基类的指针or引用来检查这...

weixin_44980842的博客 894

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

c++类型转换

duan1522630316 C++的类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast 2012-03-01 14:02 91人阅读 评论(0) 收藏 举报 在C++中,存在类型转换,通常意味着存在缺陷(并非绝对)。所以,对于类型转换,有如下几个原则: (1)尽量避免类型转换,包括隐式的类型转换 (2)如果需要类型转换

duan1522630316的专栏 656
上一篇: 采用C++的ACE库实现的一个通用的C/S架构通信程序(最终版)
下一篇: 关于c中防止头文件重复包含的2个方法
RunBoying
博客等级 码龄17年 41粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值