创建了一个 Manage 对象 m_manage,它会自动调用 Manage 类的构造函数。在构造函数中,会创建一个 Clib 对象,并将自身的指针传递给 Clib 对象的 setBase 函数。在 setBase 函数中,会调用 Manage 类中实现的 SetSData 函数,并输出参数值 10。
#include <iostream>
class Base : public std::enable_shared_from_this<Base>
{
public:
virtual ~Base() {}
virtual void SetSData(const int &data) = 0;
};
class Clib
{
public:
void setBase(std::shared_ptr<Base> base)
{
m_base = base;
if (m_base)
m_base->SetSData(10);
}
private:
std::shared_ptr<Base> m_base;
};
class Manage : public Base
{
public:
Manage() : m_clib(std::make_unique<Clib>()) {}
void init()
{
// 保存 shared_ptr
auto selfSharedPtr = shared_from_this();
m_clib->setBase(selfSharedPtr);
// m_clib->setBase(dynamic_cast<Base*>(this));
}
private:
void SetSData(const int &data) override { std::cout << data << std::endl; }
private:
std::unique_ptr<Clib> m_clib;
};
int main()
{
std::shared_ptr<Manage> m_manage = std::make_shared<Manage>();
m_manage->init(); // 在构造函数外部调用初始化函数
return 0;
}