среда, 18 августа 2010 г.

Реализация идиомы Pointer to Implementation с применением std::auto_ptr

Сегодня в очередной раз столкнулся с очень интересной ошибкой, которую уже видел этим летом и пока вспомнил в чем дело, и как ее победить в очередной раз сломал себе мозг. В следствии чего решил написать небольшую задачку, думаю изучающим C++ будет интересно знать некоторые нюансы языка.

Цель: Понять почему возникает ошибка компиляции и осознать метод ее решения.

Условия: имеется небольшой файл-хидер header1.hpp:

#include 

class CMain1 {
  class     CAddon;
  typedef   std::auto_ptr< CAddon >  AddonPtr_t;
public:
  CMain1();
private:
  AddonPtr_t m_Addon;
};
а также есть файл-реализации impl1.cpp:

#include "header1.h"

class CMain1::CAddon {
};

CMain1::CMain1()
: m_Addon(new CAddon) 
{}

Ответ (  http://www.base64.ru/ ):
----
 0JTQtdGB0YLRgNGD0LrRgtC+0YAg0LrQu9Cw0YHRgdCwIENNYWluMSDQstGL0LfRi9Cy0LDQtdGCINC00LXRgdGC0YDRg9C60YLQvtGAIHN0ZDo6YXV0b19wdHIsINC90L4g0L/RgNC4INGN0YLQvtC8IH5DTWFpbigpINC/0L7QvdGP0YLQuNGPINC90LUg0LjQvNC10LXRgiDQviDRgtC+0Lwg0LrQsNC6INGD0YHRgtGA0L7QtdC9IENBZGRvbi4g0KfRgtC+INCx0Ysg0LjQt9Cx0LDQstC40YLRjNGB0Y8g0L7RgiDQvtGI0LjQsdC60Lgg0L3Rg9C20L3QviAg0L3QsNC/0LjRgdCw0YLRjCDRgNC10LDQu9C40LfQsNGG0LjRjiB+Q01haW4oKSDQsiDRgtC+0Lwg0LbQtSDRhNCw0LnQu9C1INCz0LTQtSDQuCDQtNC10LrQu9Cw0YDQsNGG0LjRjyBDQWRkb24=
----

Комментариев нет: