Код, о котором идет речь, выглядит следующим образом:
заголовок:
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();
};
реализация: <pre>
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};</p>
<p>int Vec3d::f() {
X_AXIS = AXES[2];
}
Есть ли способ не использовать этиоператоры new (), но без добавления каких-либо новых вспомогательных переменных?
Типы должны быть в точности такими, какие они есть, чтобы быть совместимыми с остальной частью программы.
РЕДАКТИРОВАТЬ : угадывая из ответов, необходимо использовать new ()если вспомогательные переменные не используются.Это правда?Таким образом, я мог бы добавить вспомогательные переменные.В любом случае, это код, сгенерированный компилятором, так что нет проблем, если заголовки доступны для чтения.
Будет ли хорошо следующее?Теперь Вальгринд говорит, что утечек нет.
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};