operator+ объявлен вне класса, объекты которого он суммирует
Сам класс имеет динамический массив, на конструкторе создается,в деструкторе — уничтожается, но вот проблема:
Получается ошибка Access volation на этом операторе...
class ANYCLASS
{
....
char *Str; //этот указатель и указывает на дин. массив
};
ANYCLASS &operator +(ANYCLASS &p1, ANYCLASS &p2)
{
ANYCLASS Temp; //создался объект и в нем выделилась память
...
return Temp;
}
//а если перед оператором неставить &, то вылетает еще быстрее
Здравствуйте, piAnd, Вы писали:
A>Народ! Подскажите новичку как выйти из ситуации:
A>operator+ объявлен вне класса, объекты которого он суммирует A>Сам класс имеет динамический массив, на конструкторе создается,в деструкторе — уничтожается, но вот проблема: A>Получается ошибка Access volation на этом операторе... A>
A>class ANYCLASS
A>{
A>....
A>char *Str; //этот указатель и указывает на дин. массив
A>};
A>ANYCLASS &operator +(ANYCLASS &p1, ANYCLASS &p2)
A>{
A>ANYCLASS Temp; //создался объект и в нем выделилась память
A>...
A>return Temp;
A>}
A>//а если перед оператором неставить &, то вылетает еще быстрее
A>
A>Что в таких случаях делать?
1) Возвращать не ссылку на временный объект, который к моменту выхода из функции уничтожается, а копию результата.
2) Предусмотреть правильный конструктор копирования (и оператор присваивания), в котором копируется динамический массив.
const ANYCLASSoperator +(ANYCLASS &p1, ANYCLASS &p2)
{
ANYCLASS Temp; //создался объект и в нем выделилась память
...
return Temp;
}
кроме того, необходимо определить конструктор корпирования для ANYCLASS.
А еще лучше всместо члена char *Str использовать std::string или std::vector<char>
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, piAnd, Вы писали:
B>
B>const ANYCLASSoperator +(ANYCLASS &p1, ANYCLASS &p2)
B>{
B>ANYCLASS Temp; //создался объект и в нем выделилась память
B>...
B>return Temp;
B>}
B>
B>кроме того, необходимо определить конструктор корпирования для ANYCLASS. B>А еще лучше всместо члена char *Str использовать std::string или std::vector<char>
Глупая Ошибка выявилась в конструкторе копирования
При const ANYCLASS вылезает error:
e:\temp\programmer\ex\win\spl.h(308) : error C2678: binary '+' : no operator defined which takes a left-hand operand of type 'const class win_spl' (or there is no acceptable conversion)
Error executing cl.exe.
Есть ли какая-нибудь принципиальная разница, с const оператор или без?
Здравствуйте, Кодт, Вы писали:
К>А как, по-твоему, должен вызваться деструктор возвращенного значения? К> В error'е про деструктор ниче несказано, если объявить так