gpt4 book ai didi

C++ 值初始化自定义容器的项目

转载 作者:行者123 更新时间:2023-11-27 22:36:05 24 4
gpt4 key购买 nike

让我们以自定义 vector 实现为例:

template<typename Object>
class myVector {
public:
explicit myVector(int size = 0) :
_size{ size },
_capasity{ size + SPARE_CAPACITY }
{
_buff = new Object[_capasity];
if (_size > 0) {
for (int i = 0; i < _size; i++) {
//_buff[i] = 0;
}
}
}

// more code

private:
Object * _buff = nullptr;
int _size;
int _capasity;
};

所以我的问题是,如何使 myVector 进行值初始化,以防我将其初始化为:

int main() {
myVector<int> v02(5);
}

在这里,它包含 5 个 int 值,所以我需要它全部为零;与其他类型相同。我注释掉了 _buff[i] = 0; 因为它特定于 int。请给我一些提示。

最佳答案

就这么简单

for (int i = 0; i < _size; i++)
_buff[i] = Object{};

或者,您可以摆脱循环并在此处添加一对 {}(或 ()):

_buff = new Object[_capasity]{};
// ^^

但此选项将对所有 _capasity 对象进行值初始化,而不是第一个 _size 对象,如 @bipll 所述.


此外,请注意,如果您想模仿 std::vector 的行为,您需要分配原始存储空间(可能是 std::aligned_storage)并调用构造函数(通过 placement-new)和手动析构函数。

如果 Object 是类类型,_buff = new Object[_capasity]; 为所有 _capasity 对象调用默认构造函数,而不是为与 std::vector 一样的第一个 _size 对象。

关于C++ 值初始化自定义容器的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53967746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com