【发布时间】:2017-05-02 21:24:19
【问题描述】:
我目前正在编写一个池分配器。我的问题归结为以下代码:
template <typename T>
union myUnion {
T data;
myUnion<T>* nextUnion;
};
void someFunction(){
myUnion<T> mu;
T* t = new (std::addressof(mu.data)) T();
//some code
myUnion<T>* mu2 = reinterpret_cast<myUnion<T>*>(t);
}
mu的地址总是和mu2一样吗?
【问题讨论】:
-
哪个标准?
-
否则联合的意义何在?
-
@MadPhysicist:几乎所有其他内容。
-
@MadPhysicist 该标准规定“联合......是能够在不同时间包含不同类型对象的类”。这就是他们的观点。
-
无论标准怎么说,
T* t = new (std::addressof(mu.data)) T();如果涉及任何重要的构造函数或析构函数,可能不是一个好主意。
标签: c++ c++17 language-lawyer union allocator