它應該複製一個AnimatedSprite。我有第二個想法,它有改變*這個對象的不幸副作用。
使用公共命名方法實現非公共賦值運算符?
如何在沒有副作用的情況下實現此功能?
編輯:
基於新的答案,這個問題確實應該:如何實現與公共非公開賦值操作符命名的方法
沒有副作用
? (更改標題等)。
public:
AnimatedSprite& AnimatedSprite::Clone(const AnimatedSprite& animatedSprite) {
return (*this = animatedSprite);
}
protected:
AnimatedSprite& AnimatedSprite::operator=(const AnimatedSprite& rhs) {
if(this == &rhs) return *this;
destroy_bitmap(this->_frameImage);
this->_frameImage = create_bitmap(rhs._frameImage->w, rhs._frameImage->h);
clear_bitmap(this->_frameImage);
this->_frameDimensions = rhs._frameDimensions;
this->CalcCenterFrame();
this->_frameRate = rhs._frameRate;
if(rhs._animation != nullptr) {
delete this->_animation;
this->_animation = new a2de::AnimationHandler(*rhs._animation);
} else {
delete this->_animation;
this->_animation = nullptr;
}
return *this;
}
是的,你無意中通過選擇'clone'這個名字來解決這個問題,就像''swap'pre-C++ 11一樣,它在習慣C++中有特定的含義。 –
有沒有得到改變'this',因爲分配改變了它的定義。根據我的更新答案,您可以從您的方法中調用私人分配運算符。 – juanchopanza
@JoeGauterin你有什麼建議我將方法重命名爲? – Casey