【发布时间】:2019-06-06 06:55:35
【问题描述】:
给定以下类:
template<class T, std::size_t N>
class Example {
struct Element {
std::size_t id;
std::aligned_storage_t<sizeof(T), alignof(T)> actual_data;
};
std::array<Element, N> data;
public:
template<typename ...Args>
void emplace_insert(Args&&... args) {
auto some_id = 123; //for example
//placment new
new (&data[some_id]) Element(some_id, T(std::forward<Args>(args)...));
}
};
我将如何在emplace_insert 函数中使用新的数据放置?我是否需要为Element 结构定义自定义构造函数,如果需要,我将如何传递aligned_storage_t 的参数?
我正在使用对齐存储来防止默认构造。
现在对于最后一个问题,我意识到这个问题可能更多地基于意见,但我仍然希望我能得到某种答案。
只维护一个包含 id 的第二个数组而不是尝试将两者结合起来会更好吗?
【问题讨论】:
-
你不就做
data[some_id].id = some_id; new (&data[some_id].actual_data) T(std::forward<Args>(args)...);吗? -
@melpomene 现在我想起来了,这确实有道理,因为 Elements 数组毕竟是默认构造的。
标签: c++ placement-new