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.. } }; ...