在C++11中,把构造函数设成private, 提供静态的MakeShared方法,可以实现在类的构造函数执行完成后,执行特定的操作。
如下所示的代码,在SharedTest的构造函数完成后,执行Print函数
#include <memory>
#include <utility>
#include <iostream>
class SharedTest
{
private:
SharedTest(int x) : x_(x)
{
std::cout << "SharedTest x = " << x_ << std::endl;
}
public:
~SharedTest()
{
std::cout << "~SharedTest x = " << x_ << std::endl;
}
private:
void Print()
{
std::cout << "Call Print after constructor x = " << x_ << std::endl;
}
private:
int x_;
public:
template <typename... Ts>
static std::shared_ptr<SharedTest> MakeShared(Ts &&... params)
{
auto ptr = std::shared_ptr<SharedTest>(new SharedTest(std::forward<Ts>(params)...));
ptr->Print();
return ptr;
}
};
int main()
{
auto s1 = SharedTest::MakeShared(6);
return 0;
}