2012-10-28 41 views
0

做這件事的原因是我想在使用這個類時強制所有對象成爲智能指針。因此,我可以保存一些代碼,如class Vector2 final:shared_ptr <Vector2>是否正確(更新!)

class Vector2 final : shared_ptr<Vector2> 
{ 
... 
inline shared_ptr<Vector2> getVector2(); //--> inline Vector2 getVector2(); 
... 
inline static float dot(const shared_ptr<Vector2> a, const shared_ptr<Vector2> b); //--> inline static float dot(const Vector2 a, Vector2 b); 
} 

它是正確的嗎? 如果是的話,這是最佳做法嗎? 如果不是,最好的是什麼?

============================================== ====================================

也許我用另一個例子

class Sprite 
{ 
private: 
Vector2* pPosition; 
shared_ptr<Vector2> position; 

Image* pBackground; 
shared_ptr<Image> background; 
}; 

讓我解釋爲什麼我需要引用計數。 當我更新位置或背景時,我需要在分配新值之前處理刪除操作。

這個怎麼樣

inline static shared_ptr<Vector2> add(const Vector2* a, const Vector2* b) 

此返回其可以或可以不離開功能之前所使用的結果。然後我需要手動刪除,如果它不使用。

代碼保存手段 1.無需手動刪除對象 2.不需要關心它是shared_ptr還是Vector2 *。因爲我想標準化爲一種類型

回答

3

我不明白這將如何爲您節省任何東西。爲什麼你的載體需要被引用計數呢?對於基本上不需要的東西來說,這確實很昂貴,這會使代碼的語義複雜化,並使讀者轉向WTF。

問題不是vector2應該是是一個共享指針還是它應該被包裝在一個共享指針中。沒有理由做任何一方。

3

我認爲你的設計非常糟糕。這就好像你想擁有Java的生命週期或者其他東西一樣。

您需要在考慮分離問題的情況下進行設計。

您的功能dot不應該在意Vector2的生命週期是如何管理的,只需參考Vector2對象,然後在std::shared_ptr中包裝它們,然後在使用前將其解除引用。

同樣的徒勞,您的Vector2對象應該沒有關於如何管理它的生命週期的概念。

相關問題