在C++中强制实施内存对齐

Enforce Memory alignment in C++

本文关键字:内存 对齐 施内存 C++      更新时间:2023-10-16

我想设计一个API,它在内部使用EIGEN。

基于 http://eigen.tuxfamily.org/dox/TopicPassingByValue.html,如果类将特征对象作为成员,则不能按值传递。

有没有直接的方法告诉编译器(例如 g++(我的对象不能通过值传递?

您可以简单地使复制构造函数不可用。您可以通过使用 Boost 并从 boost::noncopyable 继承来实现此目的,或者通过将复制构造函数设为私有:

struct Foo
{
private:
    Foo(Foo const &) { }
};

或者在新C++中显式删除它:

struct Foo
{
    Foo(Foo const &) = delete;
    Foo(Foo &&)      = delete;
};

您可能还应该通过对赋值运算符执行相同的操作来使您的类不可分配(boost::noncopyable会为您处理这个问题(。

若要防止复制C++对象,请声明复制构造函数和赋值运算符,但将这些函数设为私有。(由于它们不被任何东西调用,因此您不必费心实现它们。

您引用的文档看起来是假的。这个Eigen::Vector2d对象如何能够在原始对象中实现其正确的对齐方式,为什么复制对象没有相同的对齐方式?

没有给出有意义的非凡信息。

只需将复制构造函数/复制运算符设为私有即可。