请问怎么样使用malloc函数使得对象的构造函数得以调用?
- C/C++ code
#include <iostream>#include <cstdlib>#include <cstring>using namespace std;/*我写了下面的代码做了测试,A*ptr=(A*)malloc(sizeof(A));//根本就没有调用构造函数结果表明如此调用malloc函数没有触发构造函数的调用。请问是不是malloc不能够支持C++的面向对象设计?还是我写的函数不对?*/class A{public: A(int _a):a(_a) { cout<<"I am in the init function"<<endl; } A() { cout<<"I am in the default construtor"<<endl; } ~A() { } int get_a() const { return a; }private: int a;};int main(){ A*ptr=(A*)malloc(sizeof(A));//根本就没有调用构造函数 //ptr->A(); 非法表达式 //A*ptr=new A;默认构造函数会被调用,C++特性使然 A* ptr_=new A(12); cout<<"ptr malloc "<<ptr->get_a()<<endl; cout<<"ptr_ new "<<ptr_->get_a()<<endl; free(ptr); delete ptr_; return 0;}
[解决办法]
malloc仅仅是分配内存,对类型什么的一概不知,所以不会调用构造函数
[解决办法]
面试需要的就是你自己背下课本。那个出题的家伙都未必说得全的,只有查标准的。
另外,你还没搞清楚new operator和operator new的区别,就试啊,看源码啊,什么的,只会把自己绕得更晕。
去买本《effective c++》认真啃啃吧。
[解决办法]