2013-04-24 55 views
1
void setCurrentTransformations(const NodeTransformations& theSet){ 
    m_currentTransformations=theSet; 
} 

我想确认一下,我完全理解这个,因为theSet在调用这个函数之后超出了范围。复制构造函数会在这里工作吗?

这实际上是拷贝theSetm_currentTransformations,对不对?换句话说,无论调用者中的theSet的范围如何,它都是安全的。

这是事实,如果这是一个指针,而不是参考,我知道它会不是是安全的。但我在这里假设它非常好,并且m_currentTransformations将复制theSet,以便theSet引用的原始值发生什么并不重要,对吗?

+0

这与安全无关。关于*正确性*更基础。 – 2013-04-24 18:26:06

+2

@KerrekSB这是你在那里做出的一个比较隐秘的评论。谨慎阐述? – johnbakers 2013-04-24 18:30:33

回答

4

这实际上将把Set复制到m_currentTransformations中,对吧?

当然,这是要做一个副本。但是,它将使用NodeTransformations类的赋值运算符来完成,所以您可能需要小心如何定义它。如果你定义了一个拷贝构造函数,你通常也需要一个赋值操作符和一个析构函数(that is commonly known as the rule of three)。

+0

“极品”有点强。我有几个需要复制构造函数和赋值的类,但不需要析构函数。 – 2013-04-24 18:49:52

+0

@RyanWitmer你是对的,[有三个规则的例外](http://stackoverflow.com/q/15557406/335858),所以我应该说“通常需要”而不是“需要”。谢谢! – dasblinkenlight 2013-04-24 18:59:40