Hello,
I have a very special problem concerning boost::noncopyable under
Windows in a shared library. A class deriving from boost::noncopyable
becomes copyable. Strange ? Here is the example code. (Using Visual
Studio 2005, no sp, Windows XP):
1) create one static lib with only TestClasses.hpp with the
following content in it:
#include
class INonCopyNormalClass: boost::noncopyable
{
public:
virtual INonCopyNormalClass* clone() = 0;
};
2) create one DLL (shared lib) with the following content:
DLLMain.hpp:
#include "../TestLib/TestClasses.hpp"
# if defined(UNCOPYABLETESTDLL_EXPORTS)
# define DLL_API __declspec(dllexport)
# else
# define DLL_API
# endif
class DLL_API AnotherNonNormalCopyClass: public INonCopyNormalClass
{
};
class YetAnotherNonNormalCopyClass: public AnotherNonNormalCopyClass
{
public:
YetAnotherNonNormalCopyClass();
virtual INonCopyNormalClass* clone();
};
DLLMain.cpp:
#include "DLLmain.hpp"
YetAnotherNonNormalCopyClass::YetAnotherNonNormalCopyClass()
{
}
INonCopyNormalClass* YetAnotherNonNormalCopyClass::clone()
{
return new YetAnotherNonNormalCopyClass(*this);
}
It is quite important that the DLL_API is defined properly !! This seems
to be the reason, that the code above compile, links and runs. This
should not be possible. The line return new
YetAnotherNonNormalCopyClass(*this); should not work. If DLL_API is
undefined or removed, you will get the correct error message and
compilation fails
ANY ideas ? SOMEONE ?
Thanks and best,
Philipp