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 <boost/noncopyable.hpp>
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