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

Я хочу подтвердить, что я понимаю это именно потому, что theSet выходит за рамки сразу после вызова этой функции.Будет ли здесь работать конструктор копирования?

Это действительно на самом деле копияtheSet в m_currentTransformations, справа? Другими словами, это безопасно, независимо от объема theSet в вызывающем.

Это факт, что если бы это был указатель вместо ссылки, я знаю, что не быть в безопасности. Но я предполагаю, что это прекрасно, и m_currentTransformations скопирует theSet, так что не имеет значения, что происходит с исходным значением, которое ссылается на theSet, верно?

+0

Это не имеет никакого отношения к безопасности. Это гораздо более фундаментально о * правильности *. –

+2

@KerrekSB - это довольно загадочный комментарий, который вы там сделали. заботиться о разработке? – johnbakers

ответ

4

Это собирается скопировать набор в m_currentTransformations, не так ли?

Абсолютно, это собирается сделать копию. Тем не менее, это будет сделано с использованием оператора присваивания класса NodeTransformations, поэтому вам может понадобиться быть осторожным с тем, как он определяется. Если вы определяете конструктор копирования, вам обычно нужен оператор присваивания и деструктор (that is commonly known as the rule of three).

+0

«Нужна» немного сильная. У меня есть несколько классов, которые нуждаются в конструкторах и назначениях копий, но не нуждаются в деструкторах. –

+0

@RyanWitmer Вы правы, есть [исключения из правила трех] (http://stackoverflow.com/q/15557406/335858), поэтому я должен был сказать «обычно нужно», а не просто «нужно». Благодаря! – dasblinkenlight

Смежные вопросы