如何使用一些非POD字段扩展struct,以便它可以与std :: aligned_storage一起使用?

时间:2014-11-02 13:18:39

标签: c++11 memory struct

我正在玩网上发现的一些代码,有些你可能知道:) 在这个模板中使用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?有可能吗?

1 个答案:

答案 0 :(得分:1)

void* raw_storage = new some_struct_aligned_t;
some_struct_t* p = new(raw_storage) some_struct_t;

虽然不清楚练习的重点是什么。普通旧new some_struct_t保证分配正确对齐的存储空间。