Вы нарушаете ODR (одно правило определения), и, скорее всего, функции-члены встроены - так как они встроены в два разных определения std::auto_ptr
, вы получаете неопределенное поведение.
Кроме того, как указывает Эдди, когда auto_ptr::~auto_ptr
освобождает удерживаемый объект, он вызовет operator delete
в EXE-файле, а не в DLL, где был вызван operator new
. Это несоответствие также может привести к сбою.
Как правило, экспортировать реализованные классы очень хрупко (классы интерфейса, состоящие исключительно из чисто виртуальных функций и экспортирующие функцию свободной фабрики для конструирования) в порядке, и тогда вы не используете __declspec(dllexport)
в классе, только заводская функция.