Вот код:
class roString
{
private:
TCHAR* m_str;
size_t m_len;
public:
roString(TCHAR* str = NULL, size_t len = 0)
{
if (!str) {
m_len = 0;
m_str = NULL;
} else {
if (!len)
StringCchLength(str, STRSAFE_MAX_CCH, &m_len);
else
m_len = len;
if (m_len) {
m_str = new TCHAR[m_len + 1];
StringCchCopy(m_str, m_len + 1, str);
} else
m_str = NULL;
}
TCHAR* nullText = TEXT("NULL_TEXT");
printf(">>>+ m_str: '%ws', len=%d\n", ((m_str) ? m_str : nullText), m_len);
};
~roString()
{
TCHAR* nullText = TEXT("NULL_TEXT");
printf("<<<- m_str: '%ws', len=%d\n", ((m_str) ? m_str : nullText), m_len);
if (m_str/* && m_len*/) {
delete [] m_str;
m_str = NULL;
m_len = 0;
}
}
TCHAR* Str() { return m_str; };
size_t Len() { return m_len; };
};
int _tmain(int argc, _TCHAR* argv[])
{
roString t = TEXT("r1");// = roString();
//roString t = roString(TEXT("qqq"), 0);
//t = roString(TEXT("asdfgh"), 3);
//t = roString(TEXT("12345"), 5);
//t = roString(NULL, 0);
exit(0);
// ...
}
Почему не вызывается первый деструктор? То есть у меня получается в любом случае, что конструктор вызывается на один раз больше. Деструктор вызывается только если конструктор вызывался более одного раза. Эксперименты проводил разкомментирую строки).