这样做的原因是我想在使用这个类时强制所有对象成为智能指针。因此,我可以保存一些代码,如
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 *。因为我想标准化为一种类型
答案 0 :(得分:3)
我不明白这会如何拯救你。为什么你的载体需要被引用计数?对于你从根本上不需要的东西来说,这真的很贵,这使你的代码的语义变得复杂,只会使读者成为WTF。
问题不在于vector2
是是共享指针,还是它应该包含在共享指针中。没有理由这样做。
答案 1 :(得分:3)
我认为你的设计非常糟糕。就好像你想拥有Java生命周期一样。
你需要考虑到关注点的分离。
你的函数dot
不应该关心如何管理Vector2的生命周期,只需通过引用获取Vector2对象,然后将它们包装在std::shared_ptr
中,然后在使用之前对它们进行解除引用。 / p>
同样徒劳无功,你的Vector2对象应该没有关于如何管理它的生命周期的概念。