有一个分配函数,该函数将智能指针返回到已分配和构造的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>() );
}
非常感谢愿意帮助我的人...马丁
最好将转发的ARGUMENTS ...参数保留在那里,但是将其应用于所有实例。有没有选择的办法?
我曾尝试解决评论中讨论的问题。为了简单起见,我仅使用原始指针: