Search code examples
c++copy-constructornoncopyable

How do I make this C++ object non-copyable?


See title.

I have:

class Foo {
   private:
     Foo();
   public:
     static Foo* create();
}

What need I do from here to make Foo un-copyable?


Solution

  • 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