构造函数是否用于初始化对象本身?

时间:2017-05-08 18:40:19

标签: c++

我想知道是否使用构造函数初始化对象本身?为了使这个问题更容易理解,这里有一个例子:

class xx 
{
   int w;
   int a;
    xx();
};  
xx::xx() 
{
    cout << "new object created";
}

因此在声明对象时:

xx objy;

调用默认构造函数(我们在这种情况下已经重新定义,如果我错了请纠正我)。你能说构造函数初始化对象“objy”或者说这个对象的初始化怎么说?顺便说一句。如果构造函数没有初始化对象,它只是用于在创建对象时立即执行某些操作,对吧?

更多: 对于像我这样的一些人来说,一些“专业人士”声称构造函数,例如这一个,似乎很奇怪:

xx::xx() 
{

}

仍然对已创建的类对象产生影响。

例如,我不明白像上面那样的构造函数如何将对象“objy”置于“其初始状态”(即使没有任何内容,它处于初始状态是什么意思?:/)在它的街区内。

- 希望有人现在明白我的观点。否则,请询问更多的例子或类似的东西。

谢谢!

2 个答案:

答案 0 :(得分:2)

构造函数的工作是将对象实例初始化为有效状态。

默认情况下,默认构造函数不执行任何操作,但默认初始化所有成员。

如果对象的成员需要超过默认初始化才有效,那么编译器默认构造函数不会删除它,编写一个构造函数来执行初始化这些成员所需的任何操作都是你的工作。

答案 1 :(得分:0)

就你的例子而言,故事将是这样的:

进程遇到使用类定义名称作为数据类型的代码。 “xx objy;”

此时,进程与操作系统通信,要求足够的连续内存来保存您正在讨论的 thing (具有名称的类的实例) objy')。在找到该内存空间后,OS将该内存位置的起始地址返回给进程,并且进程将该地址分配并绑定到该名称(这是一个命名地址,即指针)

因为在你的例子中你只是简单地重写了默认构造函数以产生一些控制台输出(这很好),没有对成员变量(状态)等进行初始化。

您的实例现在处于初始有效状态......

编辑和更新

由于您的类定义为空,因此实例不需要任何内存,因此基本上不会发生任何事情。

参考: C ++ 11标准12.1.5: 和12.8.7,12.8.11: 和12.8.18,12.8.20,12.8.22: