Помогите мне плZ, а то совсем мозги уже потекли.
Имеем простой до безобразия строковой класс XString.
Почему при создании объекта этого класса способом
XString s = "string";
вызывается второй конструктор XString(LPSTR string),
а не просто XString, с последующим вызовом перегруженного
оператора = ?
И самое главное, почему при присваивании одного
объекта этого класса другому вообще вылетает Debug
Assertion Fault, хотя присваивается то все нормально.
Насколько я понимаю, я что-то очень нехорошее замутил
с new/delete. Далее приведен исходник.
Visual C++ 5.0 — DEBUG
//-----------------------------------------------------------------------------------
#include <windows.h>
class XString
{
public:
char *Text;
WORD Size;
XString();
XString(LPSTR string);
~XString();
void SetText(LPSTR string);
void operator =(LPSTR string);
};
XString::XString()
{
Text = NULL;
Size = 0;
}
XString::XString(LPSTR string)
{
Text = NULL;
Size = 0;
SetText(string);
}
XString::~XString()
{
if(Text)
{
delete Text;
Text = NULL;
}
}
void XString::SetText(LPSTR string)
{
int i = 0;
while(string[i]) i ++;
Size = i + 1;
if(Text) delete Text;
Text = new char[Size]; //Вот эта строчка вызывает fault при присваивании
for(i = 0; i < Size; i ++)
Text[i] = string[i];
}
void XString::operator =(LPSTR string)
{
SetText(string);
}
void main()
{
XString str1 = "Just a text string\r\n";
XString str2 = "Another text string\r\n";
str1 = str2; //А это само присваивание ;))
}
Исправлена подсветка синтаксиса. -- ПК.