c++ 我怎样才能创建一个存储大小的智能数组指针?

92vpleto  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(131)

我需要一个使用mallocfree的智能缓冲区,例如:

shared_ptr<byte[]> buffer((byte*) malloc(123), free)
unique_ptr<byte[], decltype(&free)> buffer((byte*) malloc(123), free);

然而,我发现单独跟踪缓冲区的大小是乏味的并且容易出错的。
这个智能数组指针的目的是在一个类中存储一个二进制数据的缓冲区,它可以被传递给其他函数,并且可以在以后被release()编辑并传递给一个C库,C库将处理内存并在以后调用free()。我需要在不复制缓冲区的情况下完成这个**。
我可以将unique_ptrsize变量 Package 在一个结构体中,但这看起来很不优雅,得到的指针将是static_vector.arr.get(),访问数组的元素将是static_vector.arr[i],我一点也不喜欢。我想我可以定义[]操作符和get()函数。我还希望能够调用release(),所以我'我最终为unique_ptr做了一个大小合适的 Package 器,而实际上我只需要一个unique_ptr,它有一个小字段来跟踪大小(为什么它一开始就没有呢?)
是否可以创建一个继承std::unique_ptr<byte[]>并添加size字段的类?

lyr7nygr

lyr7nygr1#

unique_ptr〈字节[],decltype(&free)〉缓冲区((字节 *)内存分配(123),空闲);
然而,我发现单独跟踪缓冲区的大小是乏味的并且容易出错的。
所以振作起来。

#include <cstdlib>
#include <memory>

template<size_t N>
struct MyArray {
    std::unique_ptr<std::byte[], decltype(free)*> buffer{
            reinterpret_cast<std::byte*>(malloc(N)),
            free};
    constexpr static size_t size = N;
};

相关问题