Не вызывается деструктор
От: Аноним  
Дата: 04.01.10 13:35
Оценка:
Вот код:

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);
    // ...
}


Почему не вызывается первый деструктор? То есть у меня получается в любом случае, что конструктор вызывается на один раз больше. Деструктор вызывается только если конструктор вызывался более одного раза. Эксперименты проводил разкомментирую строки).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.