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

Sun*_*ang 1 c++ initialization unique-ptr c++14 c++17

我可以在没有默认初始化的情况下初始化数组的 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
Run Code Online (Sandbox Code Playgroud)

son*_*yao 5

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

a.vector2 = std::make_unique_for_overwrite<Vector2[]>(10);
Run Code Online (Sandbox Code Playgroud)

在 C++20 之前,您可以new自己创建数组。

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