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

时间:2018-02-10 09:30:03   浏览:次   点击:次   作者:   来源:   立即下载

#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++ 无关。该问题没有意义。

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息