有问题的代码如下:
标题:
class Vec3d : public Object {
public:
static linearalgebra::Vec3d* X_AXIS;
static linearalgebra::Vec3d* Y_AXIS;
static linearalgebra::Vec3d* Z_AXIS;
static linearalgebra::Vec3d* AXES[3];
static int f();
};
执行:
Vec3d* Vec3d::X_AXIS = new Vec3d(); Vec3d* Vec3d::Y_AXIS = new Vec3d(); Vec3d* Vec3d::Z_AXIS = new Vec3d(); Vec3d* Vec3d::AXES[3] = {Vec3d::X_AXIS, new Vec3d(),Vec3d::Z_AXIS};
int Vec3d::f() { X_AXIS = AXES[2]; }
有没有办法不使用这些 new() 运算符,但不添加任何新的辅助变量?
类型必须完全一样,才能与程序的其余部分兼容。
编辑:从答案中猜测,如果没有使用辅助变量,则必须使用 new() 。这是真的吗?因此,我可能会添加辅助变量。无论如何,这是一个编译器生成的代码,所以没问题,只要标题是可读的。
以下可以吗?现在 Valgrind 说没有泄漏。
static Vec3d INIT_X_AXIS;
static Vec3d INIT_Y_AXIS;
static Vec3d INIT_Z_AXIS;
static Vec3d INIT_AXES_1;
Vec3d* Vec3d::X_AXIS = &INIT_X_AXIS;
Vec3d* Vec3d::Y_AXIS = &INIT_Y_AXIS;
Vec3d* Vec3d::Z_AXIS = &INIT_Z_AXIS;
Vec3d* Vec3d::AXES[3] = {Vec3d::X_AXIS, &INIT_AXES_1, Vec3d::Z_AXIS};