See title.
I have:
class Foo { private: Foo(); public: static Foo* create(); }
What need I do from here to make Foo un-copyable?
Thanks!
The typical way to make a C++ object non-copyable is to explicitly declare a copy constructor and copy-assignment operator but not implement them. This will prevent the compiler from generating its own.
class NonCopyable { public: NonCopyable (const NonCopyable &) = delete; NonCopyable & operator = (const NonCopyable &) = delete; protected: NonCopyable () = default; ~NonCopyable () = default; /// Protected non-virtual destructor }; class CantCopy : private NonCopyable {};
Boost::noncopyable prevents the classes methods from accidentally using the private copy constructor. Less code with boost::noncopyable.
In C++ copying the object means cloning. There is no any special cloning in the language. As the standard suggests, after copying you should have 2 identical copies of the same object.
class Foo { private: Foo(); Foo( const Foo& ); // non construction-copyable Foo& operator=( const Foo& ); // non copyable public: static Foo* create(); }
If you're using boost, you can also inherit from noncopyable : http://www.boost.org/doc/libs/1_41_0/boost/noncopyable.hpp
EDIT: C++11 version if you have a compiler supporting this feature:
class Foo { private: Foo(); public: Foo( const Foo& ) = delete; // non construction-copyable Foo& operator=( const Foo& ) = delete; // non copyable static Foo* create(); }
Note that deleted methods should be public: https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-delete
Make the copy constructor and the assignment operator private as well. Just the declaration is enough, you don't have to provide an implementation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With