C++构造函数问题

Sim*_*ity 5 c++ pointers multiple-constructors

绝对初学者,第2版书的C++编程中,有以下声明:

HeapPoint::HeapPoint(int x, int y): thePoint(new Point(x,y)) { }
Run Code Online (Sandbox Code Playgroud)

这等于:

HeapPoint::HeapPoint(int x, int y) { thePoint = new Point(x,y); }
Run Code Online (Sandbox Code Playgroud)

而且,既然我们在构造函数中执行此操作,那么为x和分配的值是y什么?我们应该写值insted的中xynew Point(x,y)?或者,这是正确的吗?

更新:我认为我有了初始化的想法,x并且y正如在书中它在函数中有以下内容:

HeapPoint myHeapPoint(2,4);
Run Code Online (Sandbox Code Playgroud)

Mar*_*tos 2

假设thePoint是一个原始指针,那么无论出于何种意图和目的,它都是相同的。第一个版本初始化thePoint,而第二个版本分配给它,但效果几乎总是相同的,甚至生成完全相同的机器代码。

他们什么时候不一样了?

  1. 如果thePoint是某种智能指针,第一种形式将通过将新的 Point 传递给其构造函数来初始化它,而第二种形式可能会将其零初始化,然后将新的 Point 传递给其赋值运算符。
  2. thePoint是多个成员变量之一时,第一种形式将按照它在类定义中出现的顺序对其进行初始化,而第二种形式将在构造函数的主体中进行赋值。因此,两种形式之间“水合”的顺序可能有所不同,如果某些成员变量依赖于其他成员变量,这可能很重要。

如果您是初学者,其中大部分内容可能对您来说毫无意义。但不用担心。这些差异非常微妙,几乎永远不会产生影响。(我确信还有其他例外,但现在没有想到。)

这最终是风格和一致性的问题,为此我更喜欢初始化形式而不是赋值形式。