gpt4 book ai didi

c++ - 我可以在没有默认初始化的情况下初始化数组的 std::unique_ptr (我只想让它具有虚拟值)

转载 作者:行者123 更新时间:2023-12-05 09:33:17 24 4
gpt4 key购买 nike

我可以在没有默认初始化的情况下初始化数组的 std::unique_ptr (我只想让它有虚拟值)
我正在尝试使用数组的 unique_ptr 来防止内存泄漏。
但它看起来总是用 0 初始化值(看 "movups XMMWORD PTR [rax+48], xmm0")我不需要这个。我只希望 vector2 具有虚拟值。
我可以这样做吗??

#include <memory>

struct Vector2
{
float x, y;
};

struct A
{
std::unique_ptr<Vector2[]> vector2;
};

int main()
{
A a;
a.vector2 = std::make_unique<Vector2[]>(10);
}


sub rsp, 40 ; 00000028H
mov QWORD PTR a$[rsp], 0
mov ecx, 80 ; 00000050H
call void * operator new[](unsigned __int64) ; operator new[]
test rax, rax
je SHORT $LN15@main
xorps xmm0, xmm0
movups XMMWORD PTR [rax], xmm0
movups XMMWORD PTR [rax+16], xmm0
movups XMMWORD PTR [rax+32], xmm0
movups XMMWORD PTR [rax+48], xmm0
movups XMMWORD PTR [rax+64], xmm0

最佳答案

make_unique 对数组执行值初始化。您可以使用 make_unique_for_overwrite (C++20 起)改为执行默认初始化。

a.vector2 = std::make_unique_for_overwrite<Vector2[]>(10);

在C++20之前,你可以自己new数组。

a.vector2 = std::unique_ptr<Vector2[]>(new Vector2[10]);
// or
a.vector2.reset(new Vector2[10]);

关于c++ - 我可以在没有默认初始化的情况下初始化数组的 std::unique_ptr (我只想让它具有虚拟值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67378691/

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