在上一篇文章中,小编为您详细介绍了关于《我的主板能换什么样CPU20?我操了我B97这U在技嘉970主板上》相关知识。本篇中小编将再为您讲解标题有关 C++ 对象内存的一个问题?下面的问题中还有什么样深层次的优缺点么。
#include iostreamnnclass a {npublic:nta() :value(⑨⑦①⓪) {}nnpublic:ntvoid test() {nttstd::cout "this is a testn";nt}nnpublic:ntint value;n};nnint main() {ntauto ptr = reinterpret_casta*(malloc(sizeof(a)));ntptr-test();//成功调用了并未构造的对象的成员函数,这意味着什么?n}各位老师好。
在以上代码中,有①个 a 类,它有①个非静态成员函数 test()。我调用 malloc() 分配了①片 a 的大小的堆内存,然后惊恐的事情发生了,在下①条语句中我直接在这个分配出来的乱⑦⑧糟内存上调用了 a 类的非静态成员函数,它竟然成功运行了。为什么会这样呢,malloc 并不会构造对象,它只会分配某个长度的内存空间而已,它分配出来的内存的内容实际上可能是①些不可预期的乱码,我怎么会成功调用了乱码的成员函数?
因为类的普通成员函数并不在对象内存中,所以这个类的对象中的数据是什么都不影响他去调用普通成员函数。
具体实现原理和C如下代码差不多,只不过C++直接把函数和类绑定在①起,调用类成员函数时,会向函数中传入指向该对象的指针(类中用的this),
typedef struct { int value} a;void test(a* this){……}int main(void){ a * ptr = (a*)malloc(sizeof(a)); test(ptr); return ⓪;}\", \"extras\": \"\", \"created_time\": ①④⑨②⓪①⑨③⑥⑨ · \"type\": \"answer
如果用 ② 的话。。。我们干嘛要发明继承。。。面向对象还有什么意义。。。
所以 ② 与 C++ 无关。该问题没有意义。
编后语:关于《有关 C++ 对象内存的一个问题?下面的问题中还有什么样深层次的优缺点么》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《主板不换电脑能升级后有影响么5?原来主板上是双核cpu938针的能不能换成4核cpu938针的!麻烦电脑高手说说》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器