C++ 第2类矢量最终版:共享;矢量2>;是否正确(已更新!)
这样做的原因是,我希望在使用此类时强制所有对象成为智能指针。因此,我可以保存一些代码,如C++ 第2类矢量最终版:共享;矢量2>;是否正确(已更新!),c++,c++11,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, con
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 Vector2最终版:共享
{
...
内联共享_ptr getVector2();//-->内联向量2 getVector2();
...
内联静态浮点点(常量共享\u ptr a,常量共享\u ptr b);//-->内联静态浮点点(常量向量2 a,向量2 b);
}
对吗?
如果是,这是最佳做法吗?
如果没有,最好的是什么
==================================================================================
也许我用另一个例子
class Sprite
{
private:
Vector2* pPosition;
shared_ptr<Vector2> position;
Image* pBackground;
shared_ptr<Image> background;
};
类精灵
{
私人:
向量2*预设;
共享ptr位置;
图像*背景;
共享ptr背景;
};
让我解释一下为什么我需要参考计数。
当我更新位置或背景时,我需要在分配新值之前处理删除操作
这个怎么样
inline static shared_ptr<Vector2> add(const Vector2* a, const Vector2* b)
inline static shared\u ptr add(常量向量2*a,常量向量2*b)
这将返回一个结果,该结果在退出函数之前可以使用,也可以不使用。如果没有使用,我需要手动删除
代码保存方式
1.无需手动删除对象
2.不需要关心它是共享的还是矢量2*。因为我想标准化为一种类型,我不明白这会给你带来什么好处。为什么你的向量需要被引用计数?这对于您根本不需要的东西来说是非常昂贵的,这会使代码的语义复杂化,并且只会让读者使用WTF
问题不在于
vector2
是否应该是共享指针,或者它是否应该包装在共享指针中。也没有理由这样做。我不明白这样做会给你带来什么好处。为什么你的向量需要被引用计数?这对于您根本不需要的东西来说是非常昂贵的,这会使代码的语义复杂化,并且只会让读者使用WTF
问题不在于
vector2
是否应该是共享指针,或者它是否应该包装在共享指针中。也没有理由这样做。我认为你的设计非常糟糕。这就好像您想要Java生命周期或其他东西
您需要在设计时考虑到关注点的分离
您的函数dot
不应该关心如何管理Vector2的生存期,只需通过引用将Vector2对象放入,并将它们包装在std::shared_ptr
s中,然后在使用前将其取消引用即可
同样徒劳的是,你的Vector2对象不应该知道如何管理它的生命周期。我认为你的设计非常糟糕。这就好像您想要Java生命周期或其他东西 您需要在设计时考虑到关注点的分离 您的函数
dot
不应该关心如何管理Vector2的生存期,只需通过引用将Vector2对象放入,并将它们包装在std::shared_ptr
s中,然后在使用前将其取消引用即可
同样徒劳的是,Vector2对象不应该知道如何管理它的生命周期