问题遇到的现象和发生背景
构造函数形参默认值,用make_unique创建对象,形参默认值失效。
而改为new就可以
问题相关代码,请勿粘贴截图
class VBase
{
public:
VBase(){}
virtual ~VBase(){}
public:
virtual void Handle() = 0;
protected:
};
class Transfer : public VBase
{
public:
Transfer(const int& currDate = 20220209):m_currDate(currDate)
{
std::cout << m_currDate << std::endl;//此处有值20220209
}
~Transfer(){}
virtual void Handle()
{
std::cout << m_currDate << std::endl;//值为0
}
private:
const int& m_currDate; //是不是加了引用的问题
};
int main()
{
std::unique_ptr<VBase> pTrans = std::make_unique<Transfer>();
pTrans->Handle(); // 打印 0
VBase* pNew = new Transfer(); // 输出20220209
return 0;
}
运行结果及报错内容
构造函数中打印 20220209
Handle中打印 0
我的解答思路和尝试过的方法
private:
const int& m_currDate; //是不是加了引用的问题
此处的引用去掉就能达到预期效果,但是不知道是为什么。
而且为什么成员变量用引用,采用new的方式就能达到预期效果
我想要达到的结果
构造函数中打印 20220209
Handle中打印 20220209