把构造函数设成private

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

猜你喜欢

转载自blog.csdn.net/adream307/article/details/84561591