gpt4 book ai didi

c++ - 数组分配——你能阻止构造函数和析构函数被调用吗?

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

我处于不幸的境地,无法编写自己的 vector 实现(不,使用标准实现是不可能的,非常不幸)。现在使用的那个使用原始字节缓冲区和对象的就地构造和解构,但作为副作用,我无法查看实际元素。所以我决定做一个使用内部真实数组的变体实现。

在处理它时,我注意到分配数组会导致对原始缓冲区版本的构造函数和析构函数的额外调用。这种开销是否可以在不丢失数组访问权限的情况下以某种方式避免?如果它能像原始缓冲区版本一样快,那就太好了,所以它可以被替换。

如果有人知道我可以基于我自己的一个好的实现,或者至少从中获得一些想法,我将不胜感激。毕竟这项工作相当棘手。 :)

编辑:

一些代码可以更好地解释它。

T* data = new T[4]; // Allocation of "num" elements
data[0] = T(1);
data[1] = T(2);
delete[] data;

现在为数组的每个元素调用了默认构造函数,然后调用了 2 个赋值方法。因此,我们有 4 个和后来的 4 个析构函数调用,而不是只有 2 个构造函数调用,而只有 2 个。

最佳答案

as a side-effect, I can't look into the actual elements.

为什么不呢?

void* buffer = ...
T* elements = static_cast<T*>(buffer);
std::cout << elements[0] << std::endl;

关于c++ - 数组分配——你能阻止构造函数和析构函数被调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4971853/

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