先放一段代码
#include "string"
#include "iostream"
using namespace std;
struct test_sample
{
string s_data;
int i_data;
};
int main()
{
test_sample * _1 = (test_sample *)malloc(sizeof(test_sample));
test_sample _2;
_2.s_data = "123";
_2.i_data = 123;
_1->s_data = _2.s_data;
return 0;
}
在上图情况中,执行到
_1->s_data = 2.s_data;
这一行时会报错
由于C++中struct和class基本是一样的,所以猜想是由于string未初始化导致的,有可能是构造函数未被调用。
// TEST.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;
struct test_sample
{
string s_data;
int i_data;
};
int main()
{
test_sample * _1 = (test_sample *)malloc(sizeof(test_sample));
//test_sample * _1 = new test_sample();
test_sample _2;
_2.s_data = "123";
_2.i_data = 123;
_1->s_data = _2.s_data;
return 0;
}
把代码改为用new进行创建,这次运行成功。可以得出malloc并不调用构造函数的结论
验证如下
class a
{
public:
a()
{
cout<<"i am a"<<endl;
}
}
class b
{
public:
a a_in_b;
b()
{
cout << "i am b" << endl;
}
};
int main()
{
//b * _1 = (b *)malloc(sizeof(b));
b * _1 = new b();
}
结论:malloc不调用构造函数,new自动调用默认构造函数