假设我有一个固定的内存缓冲区
char *buffer;
我使用放置 new 运算符在那个缓冲区分配我的结构体。
struct S
{
std::tuple<int, double, char> m_data;
auto getRecord()
{
return m_data;
}
};
S *newS = new(buffer + offset)S;
我知道对于这样分配的项,我应该手动调用析构函数,但是如果没有涉及到簿记/资源管理,是否可以省略此步骤?换句话说,如果使用缓冲区的类的析构函数什么也不做(类似于上面的~S()
),那么可以跳过此步骤吗?如果是这种情况,我可以在不销毁以前的租户的情况下重复使用缓冲区吗?
buffer + offset
的地址对齐。 - alainbuffer + offset
对于你的类型是正确对齐的。如果buffer
本身没有对齐,或者混合使用类型导致offset
破坏了对齐,则可能会出现问题。 - Ben Voigt