class Test { public: Test() {} int implAdd(int a, int b) { return a ^ b; } }; typedef std::shared_ptr<Test> Test_ptr; Test_ptr ff_ptr(new Test(std::move(ff))); ff.implAdd(2,2);