C ++: создание исключения вызывает конструктор копирования?

У нас есть собственный класс ошибок, который используется всякий раз, когда мы генерируем исключение:

class AFX_CLASS_EXPORT CCLAError : public CObject

Он имеет следующий конструктор копирования:

CCLAError(const CCLAError& src) { AssignCopy(&src); } // (AssignCopy is a custom function)

Первоначально он был написан и скомпилирован / связан с MSVC6 (Visual Studio 2003). Я нахожусь в процессе внесения необходимых изменений, чтобы заставить его скомпилировать и связать с MSVC8 + (VS 2008+)

Когда вызывается компоновщик msvc8, я получаю следующую ошибку:

LNK2001: unresolved external symbol "private: __thiscall CObject::CObject(class CObject const &)" (??0CObject@@AAE@ABV0@@Z)

Я понимаю, что говорит мне ошибка: конструктор копирования не определен для некоторого потомка CObject, поэтому он проходит весь путь по дереву наследования до тех пор, пока не достигнет CObject, который как конструктор копирования не определен.

Я впервые увидел ошибку при компиляции библиотеки, которая определяет и сначала выдаетCCLAErrorВот почему я продолжаю, как будто это причина.

Мне удалось устранить ошибку, изменив

throw CCLAError( ... )

в

throw new CCLAError( ... )

а также

catch(CCLAError& e)
{
   throw e;
}

в

catch(CCLAError& e)
{
   throw;
}

Однако я не понимаю, почему перезапуск перехваченного исключения вызовет конструктор копирования. Я что-то упускаю совершенно очевидно? Впоследствии, почему удаление переменной, содержащей ссылку на перехваченное исключение, приведет к тому, что конструктор копирования не будет вызван?

Ответы на вопрос(6)

Ваш ответ на вопрос