При инициализации членов класса в его конструкторе, как вы можете использовать один и тот же временный объект в нескольких точках?
Пример:
// for arbitrary T1, T2, T3
T2 foo(T1 const&);
T3 bar(T1 const&);
struct A {
T2 const t2;
T3 const t3;
A() : t2(foo(T1())), t3(bar(T1())) {}
};
Это очень упрощенный пример, но и t2
, и t3
создаются в зависимости от экземпляра T1
. Теперь, если я хочу, чтобы этот объект был абсолютно одинаковым в обеих инициализациях *, у меня проблема, потому что у него нет имени. У вас есть идея, как решить эту проблему без C ++ 11 constructor-call-constructor функция или , добавляющая фиктивный класс, который вызывает A(T1())
?
* вроде так:
A(T1 const& t1) : t2(foo(t1)), t3(bar(t1)) {}
Мотивация: Что, если T1()
на самом деле что-то вроде new T()
, где адрес объекта имеет значение, так что мне приходится говорить об одном и том же объекте как в t2
, так и t3
.