Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 第2类矢量最终版:共享;矢量2>;是否正确(已更新!)_C++_C++11 - Fatal编程技术网

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对象不应该知道如何管理它的生命周期