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 回答