请教如何样使用malloc函数使得对象的构造函数得以调用
请问怎么样使用malloc函数使得对象的构造函数得以调用?
------解决方案--------------------
malloc仅仅是分配内存,对类型什么的一概不知,所以不会调用构造函数
------解决方案--------------------
面试需要的就是你自己背下课本。那个出题的家伙都未必说得全的,只有查标准的。
另外,你还没搞清楚new operator和operator new的区别,就试啊,看源码啊,什么的,只会把自己绕得更晕。
去买本《effective c++》认真啃啃吧。
------解决方案--------------------
- 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++》认真啃啃吧。
------解决方案--------------------