gpt4 book ai didi

c++ - 如何在不使用 new 的情况下进行默认初始化?

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:23 29 4
gpt4 key购买 nike

我正在尝试实现我自己的 std::vector 容器,并且我正在使用 realloc() 来调整它的大小,以防止每次都被删除和重新分配。使用以下代码:

buffer = new T[n]();

这将默认初始化数组的每个元素,并允许我立即开始访问它们。但是,由于标准规定内存 必须事先通过 malloc()、calloc() 或 realloc() 分配才能使用 realloc(),所以我不能使用 新的

我知道 calloc() 会对内存进行零初始化,但我不确定这是否与 new T[n]() 具有相同的行为.使用 C 风格内存分配进行默认初始化的正确方法是什么?

最佳答案

首先,不,零初始化内存与为该内存应该保存的对象调用默认构造函数不同。您必须调用构造函数。所以 malloccalloc 的正确性无关紧要;所以如果你打算走那条路,使用 malloc——它更快。

其次,realloc 不会直接工作,因为它不知道如何复制对象。有些对象可以逐字节复制,对于这些类型,realloc 就可以了。但对于大多数类型来说,复制涉及额外的操作,你必须使用复制构造函数或复制赋值运算符来进行复制。所以realloc可以在特殊情况下使用,但一般情况下不行。

因此,您实际上仅限于 mallocfree,以及构造函数(通过放置 new)和析构函数。

关于c++ - 如何在不使用 new 的情况下进行默认初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48081302/

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