分配函数的数组版本

问题描述 投票:2回答:2

有一个分配函数,该函数将智能指针返回到已分配和构造的T的单个实例的内存池:

template<typename T, typename... ARGUMENTS>
std::unique_ptr<T, HeapDeleter<T>> allocate_unique( ARGUMENTS&&... arguments ) {

    HeapAllocator<T> allocator;

    /* Allocate memory in memory pool */
    T* ptr = allocator.template allocate<1>();

    if( ptr != nullptr ) {
        /* Construct T in allocated memory */
        ::new( static_cast<void*>( ptr ) ) T( std::forward<ARGUMENTS>( arguments )... );
    }

    return std::unique_ptr<T, HeapDeleter<T>>( ptr, HeapDeleter<T>() );
}

我正在尝试实现一个数组变体,该变体能够分配T的N个元素,并牢记这种功能的用法一致性。最好在其中保留转发ARGUMENTS ...参数,但将其应用于所有实例。有没有选择的办法?

template<typename T, typename... ARGUMENTS, std::size_t N>
std::unique_ptr<T[], HeapDeleter<T, N>> allocate_array( /* ??? */ ) { /* <--- */
    HeapAllocator<T> allocator;

    /* Allocate memory in memory pool */
    T* ptr = allocator.template allocate<N>();

    if( ptr != nullptr ) {
        std::ptrdiff_t idx = 0;

        /* Run T's move constructor for all the elements */
        ( ::new( static_cast<void*>( ptr + idx++ ) ) T( std::forward<ARGUMENTS>( arguments ) ), ... );
    }
    return std::unique_ptr<T, HeapDeleter<T>>( ptr, HeapDeleter<T>() );
}

非常感谢愿意帮助我的人...马丁

c++ arrays c++17 variadic-templates allocation
2个回答
1
投票

最好将转发的ARGUMENTS ...参数保留在那里,但是将其应用于所有实例。有没有选择的办法?


1
投票

我曾尝试解决评论中讨论的问题。为了简单起见,我仅使用原始指针:

© www.soinside.com 2019 - 2024. All rights reserved.