有关 C++ 对象内存的一个问题?下面的问题中还有什么样深层次的优缺点么

发表时间:2018-02-10 09:30:03 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《我的主板能换什么样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针的!麻烦电脑高手说说》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题