class base
{
public:
virtual int Exec() = 0;
virtual string name() = 0;
};
class cmdbase:public base
{
public:
virtual int Exec(){
printf("cmdbase...");
return 0;
}
virtual string name()
{
return "cmdbase";
}
public:
int m_count;
};
class winbase:public base
{
public:
virtual int Exec(){
printf("winbase");
return 0;
}
virtual string name()
{
return "winbase";
}
public:
int m_count;
};
void testBaseClass()
{
// 1.生成一个实例
std::shared_ptr<cmdbase> p2 = std::make_shared<cmdbase>();
p2->m_count = 20;
// 2.强制转成void*
auto temp = reinterpret_cast<void *>(&p2);
// 3.通过SendMessage 或 PostMessage发送出去
WPARAM param = (WPARAM)temp;
// 4.如果这个指针被删除了
//p2.reset();
{
// 接收回调里边判断
auto rev = * reinterpret_cast<std::shared_ptr<base>*>(param);
if (rev){
int c = 0;
rev->Exec();
}
}
}
我测试可以通过这个方法,来传递share_ptr 类,并且可以检测如果是释放了就不会导致崩溃。