编译器提供的默认构造函数
到底是什么都不干,还是会给成员赋初值?
[解决办法]
2楼说的很全面了。
如果抛开虚表、继承这些因素,单考虑成员变量的情况下。
成员变量是对象的会调用对象的默认构造函数,即会初始化为默认值
成员变量是普通类型的则不会初始化。
所以安全的做法是在默认构造函数以及其他构造函数中把成员变量手动初始化。
我在vs2010下面测试的情况是这样的。
#include <iostream>
#include <string>
#include <new>
using namespace std;
class A
{
public:
int data;
string str;
};
int main()
{
char buff[100] = "abcdefghijklomnopresgoiuoisufjlsglasdjflsdjflsajfhlcvhskdfhskdfhsfhssdf";
cout << buff << endl; //内存中是垃圾值
A* a = new(buff) A; //用placement new来申请内存并且构造对象
cout << a->data << endl; //简单起见,用了public变量
cout << a->str << endl;
a->~A(); //手动调用析构函数,不能用delete
return 0;
}
//结果
//int 打印的值不是0
//string 什么都没打印。
[解决办法]
一般不会初始化基本类型成员。