Как создать временный объект такого же класса внутри этого же класса

Рейтинг: 0Ответов: 1Опубликовано: 30.10.2014

читаем исходник

#include <iostream>

using namespace std;

class abc;

class abc{
private:
abc * a; // здесь мне нужен временный объект такого же класса
public:
abc(){ 
    a = new abc; // как прекратить бесконечный цикл создания новых обьектов
}

~abc(){ delete a; }
};

int main(){
abc tmp;

return 0;
}

Ответы

▲ 3Принят

что бы сработал оператор (=) нужно вернуть такой же изменённый класс по ссылке

Пардон, при чем тут оператор (=)? Выражение типа a + b не является lvalue - вы не можете присвоить ему другое значение, а следовательно, к нему неприменим оператор (=). В интернете полно примеров перегрузки оператора (+) в С++, и там нигде не используют подобных... э-м-м-э... излишеств, что вы придумали. Посмотрите эти примеры. Стоит также отметить, что результат переггруженного оператора (+) вообще возвращают не по ссылке.

Обновление

@perfect не знаю, что вы подразумеваете под безымянным объектом, но на всякий случай вот вполне простой и прозрачный пример перегрузки оператора с MSDN:

struct Complex {
   Complex( double r, double i ) : re(r), im(i) {}
   Complex operator+( Complex &other );
   void Display( ) {   cout << re << ", " << im << endl; }
   private:
   double re, im;
};

Complex Complex::operator+( Complex &other ) {
   return Complex( re + other.re, im + other.im );
}