throw, wchar_t* и память
От: __kain Россия  
Дата: 14.04.08 08:28
Оценка:
Добрый день!

Вот и сбылся со мной анекдот — сообщение об ошибке вызвало ошибку

В двух словах: генерирую исключение, хочу посмотреть текст. Вылетаю. Вот код:
#include <windows.h>
#include <stdio.h>
#include <conio.h>

class CSomeException
{
private:
    wchar_t*    _msg;
    int            _code;

public:

    CSomeException(int code, const wchar_t* msg)
    {
        size_t len = wcslen(msg);
        _msg = new wchar_t[len + 1];
        wcscpy(_msg, msg);

        _msg[len] = L'\0';

        _code = code;
    }

    wchar_t* GetMessage()
    {
        return _msg;
    }

    int GetCode()
    {
        return _code;
    }

    ~CSomeException()
    {
        delete _msg;
    }
};

int main()
{
    try
    {
        throw (CSomeException(0, L"Error string"));
    }
    catch(CSomeException& exc)
    {
        MessageBox(0, exc.GetMessage(), L"", 0);
    }
    //
    puts("End...");
    _getch();
    return 0;
}
Причем получается так, что при переделке с использования wchar_t на std::wstring пример работает. Не могу понять, почему приведенный текст не работает. Помогите
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.