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的中x和y在new Point(x,y)?或者,这是正确的吗?
更新:我认为我有了初始化的想法,x并且y正如在书中它在函数中有以下内容:
HeapPoint myHeapPoint(2,4);
Run Code Online (Sandbox Code Playgroud)
假设thePoint是一个原始指针,那么无论出于何种意图和目的,它都是相同的。第一个版本初始化thePoint,而第二个版本分配给它,但效果几乎总是相同的,甚至生成完全相同的机器代码。
他们什么时候不一样了?
thePoint是某种智能指针,第一种形式将通过将新的 Point 传递给其构造函数来初始化它,而第二种形式可能会将其零初始化,然后将新的 Point 传递给其赋值运算符。thePoint是多个成员变量之一时,第一种形式将按照它在类定义中出现的顺序对其进行初始化,而第二种形式将在构造函数的主体中进行赋值。因此,两种形式之间“水合”的顺序可能有所不同,如果某些成员变量依赖于其他成员变量,这可能很重要。如果您是初学者,其中大部分内容可能对您来说毫无意义。但不用担心。这些差异非常微妙,几乎永远不会产生影响。(我确信还有其他例外,但现在没有想到。)
这最终是风格和一致性的问题,为此我更喜欢初始化形式而不是赋值形式。