如何计算实例数组中未删除的实例
how to count not deleted instances in array of instances?
我的代码中有一个实例数组,如下所示:
class Squad : public ISquad
{
public:
Squad(void);
Squad(Squad const & src);
virtual ~Squad(void);
int getCount(void) const;
int push(ISpaceMarine*);
ISpaceMarine* getUnit(int) const;
ISpaceMarine** getUnits(void) const;
int getCapacity(void) const;
Squad & operator=(Squad const & rhs);
private:
ISpaceMarine **_units; // HERE IS THE ARRAY OF INSTANCES
int const _squadCapacity;
};
在构造函数中像这样初始化
Squad::Squad(void) : _units(new ISpaceMarine*[64]), _squadCapacity(64)
{
return;
}
首先,好办法是好办法吗?
如果是,我尝试计算数组中有效实例的数量(不是NULL
,不是deleted
(,但我不知道如何检查_units[20]
是否被删除。
我该怎么做?
他是我目前的做法:
int Squad::getCount(void) const
{
int count = 0;
while (this->_units[count] != NULL && count < this->_squadCapacity)
count++;
return count;
}
ISpaceMarine **_units; // HERE IS THE ARRAY OF INSTANCES
int const _squadCapacity;
- 首先,这是好方法吗?
不,这不是一个好方法,并且巧妙地说明了为什么 std 容器和智能指针是一个很大的改进。
使用智能指针,您可以自动表达和处理所有权。
我的印象是Squad
管理SpaceMarines
,在这种情况下,您应该使用std::unique_ptr
。 然后,您的Squad
将看起来像
class Squad : public ISquad
{
public:
size_t getCount() const;
void push(ISpaceMarine&&);
using SpaceMarineIterator = std::vector<std::unique_ptr<SpaceMarine>>::iterator;
// A typedef/using for this iterator would be appropriate.
SpaceMarineIterator getUnit(int) const;
// And this
SpaceMarineIterator begin() const;
SpaceMarineIterator end() const;
size_t getCapacity() const;
// no need for copy assign either.
//Squad & operator=(Squad const & rhs);
private:
std::vector<std::unique_ptr<ISpaceMarine>> units;
// No need for capacity.
};
现在,如果您需要不同的所有权模型,您可以查看 std::shared_ptr
和 std::weak_ptr
.不过,您的模型应该努力使用std::unique_ptr
。
注意:不要放弃使用
std::vector<SpaceMarine> units;
相关文章:
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- 如何在模板函数中实例化其长度使用模板参数的数组
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- 我可以初始化 const 实例,以便我可以将其用作 const 来初始化数组吗?
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 如何为包含另一个类实例的数组制作常量 getter?
- 是否允许使用初始值设定项列表将const数组引用实例化为构造函数参数
- 如何创建具有不同字符数组的多个类实例?
- 包含不同大小静态数组的类的多个实例
- 如何在C++中动态分配全局字符数组中的类实例?
- 我可以从initializer_list实例化数组吗?
- 在 C++ 结构内声明的数组 A[1] 创建多个实例
- std::在类包装器实例化时设置的数组大小
- 如何通过循环访问数组来读取和存储实例的值?
- 分割故障 - 遇到问题,创建新的数组实例
- 无法用const char *数组实例化模板
- 数组、构造函数和实例
- 类C++的静态(单实例)数组
- 将2D数组的实例分配给3D数组中的索引