我有一个关于 C++ 析构函数行为的问题,更多的是出于好奇。我有以下课程:
基数.h
class BaseB;
class BaseA
{
public:
virtual int MethodA(BaseB *param1) = 0;
};
class BaseB
{
};
小鬼
#include "Base.h"
#include <string>
class BImp;
class AImp : public BaseA
{
public:
AImp();
virtual ~AImp();
private:
AImp(const AImp&);
AImp& operator= (const AImp&);
public:
int MethodA(BaseB *param1) { return MethodA(reinterpret_cast<BImp *>(param1)); }
private:
int MethodA(BImp *param1);
};
class BImp : public BaseB
{
public:
BImp(std::string data1, std::string data2) : m_data1(data1), m_data2(data2) { }
~BImp();
std::string m_data1;
std::string m_data2;
private:
BImp();
BImp(const BImp&);
BImp& operator= (const BImp&);
};
现在的问题是,有了这段代码,一切都完美无缺。但是,当我将 BImp 的析构函数设为虚拟时,在调用 AImp::MethodA 时,BImp 类的数据(m_data1 和 m_data2)似乎未初始化。我已经检查并确保包含的数据在构建时是正确的,所以我想知道这背后的原因可能是什么......
干杯!
编辑:param1 实际上是 MethodA 中对 B 的引用。看起来我对我的真实代码进行了过多的清理!
Edit2:重新排列代码以显示两个不同的文件。测试了这段代码可以编译,不错。对于那个很抱歉!