У меня есть класс, где я использую this
для инициализации void*
указателя.Но проблема в том, что когда я передаю экземпляр этого класса по значению , указатель не изменится на новый адрес в стеке.Итак, я подумал переопределить конструктор копирования, чтобы переназначить указатель с новым адресом this
.Но мне нужны переменные для вызова конструктора суперкласса, который я обычно получаю по параметрам конструктора, но у меня их нет в конструкторе копирования ...
Надеюсь, я хорошо объяснил ...
Итак, вопрос в том, могу ли я сохранить процедуру конструктора копирования по умолчанию, куда я добавлю часть переназначения указателя?Или есть лучшие альтернативы?
Спасибо
Вот код:
class GetsCopiedByValue : public SuperClass
{
GetsCopiedByValue(Type1 *t1, Type2 *t2, float var1, /* A lot of other things I need */) :
SuperClass(t1, t2), var1(var1)
{
t1->set_GetsCopiedByValue_Address(this); // ***
}
}
Где-то еще:
{
GetsCopiedByValue instance (t1, t2, 4.64, /* All the other things */);
SomeType *t = new SomeType(instance); // <-- here, it gets copied by value,
} // but the original "instance" goes (here) out of scope and the address
// I assigned (***) is not longer valid, so I have to
// reassign the address to the new address, after copying it.