Проблема
class CObject {
int a, b;
public:
CObject(int A, int B) : a(A), b(B) {}
CObject() : a(0), b(0) {}
int sum() { return a + b; }
};
...
if (A && B) {
CObject o(A, B);
} else {
CObject o;
}
// Тут любая "o" вызодит из области видимости и объект мрёт смертью храбрых
Опустим нудные лекции о том что при нетривиальной логике или захватом иных ресурсов надо правильно реализовывать и конструктор с оператором копирования и деструктор.
Можешь сделать тупо
CObject o;
if (A && B) {
CObject o1(A, B);
o = o1; // нужен оператор копирования
} else {
// хм.. и правда тупо получилось
}
можешь сделать лучше
#include <memory>
std::unique_ptr<CObject> o;
if (A && B) {
o.reset(new CObject(A, B));
} else {
o.reset(new CObject());
}
if (!o) {
std::cerr << "O_o WTF?!" << std::endl;
}
std::cout << "sum: " << o->sum() << std::endl;
// delete o; // не нужен! почему? оставлю в качестве "дом`ашки"
Пользователь решил продолжить мысль 12 Декабря 2012, 13:54:18:
Чистый,
Спокойно, тут и не такую феерическую ахинею спрашивали, и ничё, прокатывало.
Пользователь решил продолжить мысль 12 Декабря 2012, 13:55:45:
Да, извиняюсь, ключик -std=c++0x или -std=c++11 не забудьте компилятору подсунуть