如何解决使用大数组静态成员的正确方法
-
我想要一个类拥有一个大数组(至少 100000 个元素)的所有权。
-
我有一个名为
BaseProduct
的类(成员包括name
、price
、cost
、print()
...) -
我有一个类
BasicProductContainer
将控制BaseProduct
的数组。 -
我尝试在我的
BasicProductContainer
中有一个指向数组的共享指针成员:
private:
std::shared_ptr<std::array<BaseProduct,NUMBER_OF_PRODUCTS>> m_ptrArrProductContainer;
我想避免头文件中的数组定义,所以我在.cpp
的类构造函数中这样做了:
static std::array<BaseProduct,NUMBER_OF_PRODUCTS> ProductContainer;
BasicProductContainer::BasicProductContainer() {
m_ptrArrProductContainer = std::make_shared<std::array<BaseProduct,NUMBER_OF_PRODUCTS>>(ProductContainer);
}
这“有效”,但我想知道是否有更好的方法?或者更好看的?指向数组的指针是个好主意吗?
解决方法
如果数组不是共享的,我认为它不应该是shared_ptr
。你试过unique_ptr
吗?
还有一个 pimpl
习惯用法,通常用来避免在头文件中定义数据:
// BasicProductContainer.h
class BasicProductContainerImpl; // forward declare pimpl
class BasicProductContainer {
private:
std::unique_ptr<BasicProductContainerImpl> m_impl;
}
// BasicProductContainer.cpp
class BasicProductContainerImpl {
public:
std::array<BaseProduct,NUMBER_OF_PRODUCTS>> arrProductContainer;
}
BasicProductContainer::BasicProductContainer()
: m_impl(std::make_unique<BasicProductContainerImpl>())
{
// m_impl->arrProductContainer to access the array
}
请注意,该数组不是 static
,但您对主要帖子的评论(每个 BasicProductContainer
应该有自己的容器)表明您不想要 static
。>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。