Unique_ptr 到指针数组语法

Unique_ptr to array of pointers syntax

我试图让一个结构拥有一个指向堆上对象指针数组的指针。为了不必担心删除这些对象,我想使用智能指针。但是,我似乎找不到正确的语法...

这就是(我认为)我想要达到的:

    const std::unique_ptr<(*Position)[]> entity_position;

然后接收一个unique_ptr<*Position[]>作为结构构造函数的参数。但是我在结束 ']' 时收到 expected expression 错误。 我看过 std::unique_ptr with array pointer (to confirm delete[] would indeed be called) and 但我还没有完全理解最后一个试图达到的目的。

这是我正在编写的代码的简化版本:

#include <memory>
#include "Position.hpp"
struct myStruct final : public baseStruct{
    const std::unique_ptr<(*Position)[]> pos_pointer_array;

    myStruct(std::unique_ptr<(*Position)[]> ptr_to_get): pos_pointer_array(ptr_to_get){}

}

非常感谢任何帮助! (免责声明:我以前没有真正使用过智能指针...)

A unique_ptr 到数组只会清理数组,但如果元素是指向存储在别处(大概在堆上)的对象的指针,那么这些对象不会自动清理。

看来你更想要一个

 std::vector< std::unique_ptr<Position>> 

unqiue_ptr 到具有自定义删除器的数组,该删除器也删除元素。另一方面,如果数组拥有 Positions 的可能性很高,那么您只需要一个

 std::vector<Position>

正如 IlCapitano 所说:

Position *[] should work.

指向 Position 的指针是 Position*

Position* 的数组(大小未知)是 Position*[]


但是你应该检查一下你是否真的需要这个。也许你想要 std::unique_ptr<Position[]>?这是指向对象数组(而不是指针数组)的智能指针的常见情况。