c++如何判断二进制相同的对象?

查看 84|回复 4
作者:codehz   
假如有两个自定义类 class A 和 class B ,这两个自定义类的对象长度均为 32 字节,然后有如下代码
A* ptr = new A(/*paratemerA*/);  //先生成一个 class A 的对象为 objectA
A* objectA = ptr;
if(/*condition == true*/){
    ptr->~A();  //销毁对象 class A ,但内存没有还给系统
    ptr = new B(/*paratemerB*/);//在原来的内存上生成一个 class B 的对象为 objectB
}
if(ptr == objectA)
    ptr->doSomething();
objectA 和 objectB 这两个类对象,长度均为 32 字节,这两个对象创建在相同的内存里(创建时间不一样),然后这段代码在运行时出现了一个巧合,生成的这两个对象二进制完全一样
那这种情况下 C++时如何判断 ptr == objectA 这段代码的?

objecta, PTR, class, 对象

sunstar   
需要考虑的问题是为什么你会有一个无效的指针需要比较?有这个无效的指针在,你问题是解决不完的…
polaa   
ABA 问题?可以看看 brpc 的对象池
Inn0Vat10n   
感觉你可能需要看 malloc 或者 calloc 相关堆实现
包括 free chunk 之后插入 fast bin 或者 tcache 之类的
好像涉及 uaf 或者 undefined behavior 漏洞吧
堆相关知识忘光了 就这些吧
sunstar   
c++这里比的就是指针里存的地址,实际指向什么,指向的东西是不是合法的是不管的
您需要登录后才可以回帖 登录 | 立即注册

返回顶部