我正在玩网上发现的一些代码,有些你可能知道:)
在这个模板中使用C ++ 11我不能这样做(对于T=std::string
):
struct some_struct_t
{
T container;
std::atomic<some_struct_t*> next;
};
typedef typename std::aligned_storage<sizeof(some_struct_t), std::alignment_of<some_struct_t>::value>::type some_struct_aligned_t;
编译良好,但如果您尝试触摸node->container
some_struct_t* node = reinterpret_cast<some_struct_t*>(new some_struct_aligned_t);
您将获得分段错误,因为std:string
未正确初始化。
我不想要提升或类,只需要简单的C ++ 11和struct。 如何扩展我的结构以使用std:string?有可能吗?
答案 0 :(得分:1)
void* raw_storage = new some_struct_aligned_t;
some_struct_t* p = new(raw_storage) some_struct_t;
虽然不清楚练习的重点是什么。普通旧new some_struct_t
保证分配正确对齐的存储空间。