0

その理由は、このクラスを使用するときにすべてのオブジェクトをスマート ポインターにすることを強制したいからです。したがって、次のようないくつかのコードを保存できます

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* かを気にする必要はありません。ひとつの型に統一したいから

4

2 に答える 2

3

あなたのデザインはかなりひどいと思います。それはあたかも Java のライフタイムか何かを持ちたいかのようです。

関心の分離を念頭に置いて設計する必要があります。

関数dotは、Vector2 の有効期間がどのように管理されているかを気にする必要はありません。Vector2 オブジェクトを参照によって取得し、それらをstd::shared_ptrs でラップした場所で使用する前に逆参照します。

同様に、Vector2 オブジェクトには、その有効期間がどのように管理されるかについての概念がないようにする必要があります。

于 2012-10-28T15:29:18.543 に答える
3

それがあなたを救う方法がわかりません。ベクトルを参照カウントする必要があるのはなぜですか? これは、基本的に必要のないものに対して非常に高価であり、コードのセマンティクスを複雑にし、リーダーを WTF にするだけです。

問題は、共有ポインターにするvector2必要あるかどうか、または共有ポインターにラップする必要があるかどうかではありません。どちらもする理由はありません。

于 2012-10-28T14:56:11.027 に答える