方法:将A的this指针传入到成员对象B中,注意B不能使用智能指针来存储A的this指针,会导致无法析构A对象。
father.h头文件
#pragma once
#include <memory>
#include <iostream>
#include "client.h"
class father
{
public:
father() {
}
~father() {
}
void init()
{
m_clientPtr = std::make_shared<client>(this);
m_clientPtr->test();
}
void doSomething()
{
std::cout << "father do something" << std::endl;
}
private:
std::shared_ptr<client> m_clientPtr;
};
client.h头文件
#pragma once
#include <memory>
#include <iostream>
class father;//需声明father类
class client
{
public:
client(father *p) :m_fatherPtr(p) {}
~client() {
}
void test();
father* m_fatherPtr;//注意这里不能用智能指针
};
client.cpp
#include "client.h"
#include "father.h"//注意这里要加father的头文件
void client::test()
{
m_fatherPtr->doSomething();
}
main.cpp
#include <algorithm>
#include "father.h"
int main(int argc, char* argv[])
{
father f;
f.init();
return 0;
}