class Vector2 final:shared_ptr <vector2>是否正确(更新!)</vector2>

时间:2012-10-28 14:51:06

标签: c++ c++11

这样做的原因是我想在使用这个类时强制所有对象成为智能指针。因此,我可以保存一些代码,如

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 *。因为我想标准化为一种类型

2 个答案:

答案 0 :(得分:3)

我不明白这会如何拯救你。为什么你的载体需要被引用计数?对于你从根本上不需要的东西来说,这真的很贵,这使你的代码的语义变得复杂,只会使读者成为WTF。

问题不在于vector2 共享指针,还是它应该包含在共享指针中。没有理由这样做。

答案 1 :(得分:3)

我认为你的设计非常糟糕。就好像你想拥有Java生命周期一样。

你需要考虑到关注点的分离。

你的函数dot不应该关心如何管理Vector2的生命周期,只需通过引用获取Vector2对象,然后将它们包装在std::shared_ptr中,然后在使用之前对它们进行解除引用。 / p>

同样徒劳无功,你的Vector2对象应该没有关于如何管理它的生命周期的概念。