C++11 arrived with std::thread and related classes built within the standard. With the move semantics in place, the construction and assignment practices of 'std threads' deserve a small write up. Let's define a 'Runnable' first: class Runnable { public: virtual void operator ()() = 0; virtual ~Runnable(){} }; class Task : Runnable { public: void operator ()() { //do sth here.. } }; //later.. #include <thread> Task runnable; std::thread t1; //not attached to any thread std::thread t2 ( runnable ); //attached and running Copy Construction of std::thread is not allowed std::thread t3 ( t2 ); // compilation error std::thread t4 = t2; // compilation error error : use of deleted function std::thread (const std::th