最近,我意识到的潜在问题内存对齐为固定大小的矢量化的本征对象。
class Foo
{
...
Eigen::Vector2d v;
...
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};
...
Foo *foo = new Foo;
Run Code Online (Sandbox Code Playgroud)
我想知道这个代码是否可以?
class Foo2
{
...
Foo foo;
...
};
...
Foo2 *foo = new Foo2; //?
Run Code Online (Sandbox Code Playgroud)
还是应该EIGEN_MAKE_ALIGNED_OPERATOR_NEW
在Foo2
类中再次添加?这就是建议在这里我想:
如果我们添加 EIGEN_MAKE_ALIGNED_OPERATOR_NEW,这只能解决 Cartographer 库本身的问题。该库的用户还必须将 EIGEN_MAKE_ALIGNED_OPERATOR_NEW 添加到包含矢量化 Cartographer 类的类中。这听起来像是一场维护噩梦。
我没有新运算符重载的经验。我认为这个问题更笼统,并且以某种方式与 new 运算符在 C++ 中的工作方式有关。例如,重载的 new 运算符 inFoo
是否被默认的 new 运算符 in 调用Foo2
?继承呢?如果Foo2
从继承Foo
,要我们把同样EIGEN_MAKE_ALIGNED_OPERATOR_NEW
的Foo2
? …