問題のコードは次のとおりです。
ヘッダ:
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};