我很惊讶地看到,在VS2013附带的Visual C++版本中,新创建的类的数据成员似乎会根据它们的类型自动初始化为0或null 。这是新的 - 非常有用!- 我的经验中的行为。我以前在编写严肃的应用程序时只使用过VC++ 版本 4,而早在 1990 年代中期,初始值就被明确声明为未定义/随机。
这可能是使用调试库的一些有用属性,还是可以一直依赖空初始化?
根据要求,一些示例代码 - 恐怕没什么令人兴奋的:
class CData
{
public:
CData();
CData(const CData ©);
~Data();
const CData& operator=(const CData ©);
//Accessors/Mutators follow...
private:
bool Initialize_Data();
//Just giving a couple of examples of data member sets.
char *input_script_name;
int size_input_script_name;
int size_input_script_name_buffer;
char *interpreter_name;
int size_interpreter_name;
int size_interpreter_name_buffer;
};
CData::CData()
{
Initialize_Data();
}
CData::~CData()
{
//Code to store relevent data in registry
//and then free dynamically allocated memory follows...
}
bool CData::Initialize_Data()
{
//Code to retrieve data from registry stored at end of last run follows
//along with routines to check bounds.
//
//At this point, without executing any further a breakpoint is triggered
//and on inspecting data members in a Watch on 'this' I find them
//to be already initialized to either 0 or null respectively.
}
...
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
//Application entry point;
CData application_data; //and away it goes!
//Usual name mutex to prevent multiple instances and message loop follow...
}
正如我所说的非常基本,我并没有说明所有代码。但是,在到达“Initialize_Data”中的断点时——即在创建类时立即执行任何其他操作之前——所有数据成员在 Watch 中显示为 0 或 null。这是相当令人惊讶的!