读书人

请教如何样使用malloc函数使得对象的构

发布时间: 2012-03-28 15:40:03 作者: rapoo

请问怎么样使用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++》认真啃啃吧。
[解决办法]
探讨

引用:

malloc仅仅是分配内存,对类型什么的一概不知,所以不会调用构造函数

我看到Borland C++的new是这个样子实现的:
void * operator new(size_t size)
{
size=size<1?1:size;
return malloc(size);
}

请问new怎么知道类型转换呢?
难……

读书人网 >C++

热点推荐