我试图确保一个对象在我将其添加到vector
数据结构之前得到对齐。在回答一个warning C4316: 'Basic' : object allocated on the heap may not be aligned 16
警告,我已经在为Basic
对象如下:unique_ptr <>使用_aligned_malloc()的C++数据对齐
class Basic
{
public:
Basic();
~Basic();
};
它在这里一个标准的对象。接下来,unique_ptr
到Basic
的new
实例被分配给这样做的好处。 (相对于标准的指针)
unique_ptr<Basic> e_Basic{new Basic()};
我试图对准数据,使得我可以避免对准问题以后:
e_Basic.reset =_aligned_malloc((size_t)sizeof(Basic), (size_t)(16 + (sizeof(Basic) % 16))); //Verify alignment.
最后添加的指针vector
阵列。
LocalBasicQueue.push_back(move(e_Basic));
编译器说,这是犹太,但我的“什么是忽悠?”代码感正在消失。这会导致指向(当然)对齐的代码?
它是确定声明(e_Basic.reset
)等于一个指针以这种方式[由_aligned_malloc()
返回]并调用其,将具有新的指针分配?
'e_Basic.reset = ...'?除非您询问编译器错误,否则请尝试显示正确的代码,最好是[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 –
哦,并且不需要投入'sizeof ...'的结果,它会自动输入'size_t'。你也应该尽可能避免使用C++中的C风格类型,如果可能的话,也可以使用普通类型。 ***如果您需要进行演员阵容,请先尝试使用'static_cast'。 –
我编辑了帖子,谢谢。 –