通过值传递

Passing this by value

本文关键字:值传      更新时间:2023-10-16

愚蠢的问题:通过值传递这个值的最佳方式是什么?

背景:让我们使用汽车和汽车选项。我曾经有过福特(FordOptions)、本田(HondaOptions)这样的建设者。所有汽车来源于Car,所有选项来源于CarOptions。我曾经有一个汽车工厂,它传递一个指向CarOption的指针,检查类型,生产合适的汽车,并返回一个指向通用汽车的指针。

我现在已经改变了这一点,使CarOption有一个返回汽车的虚拟ProduceCar,每个汽车选项都实现其特定的生产。因此,当我得到一个指向汽车选项的通用指针时,我只需调用CarOptions.ProduceCar并得到一个针对汽车的通用指针。

这一切都很好,除了在FordOption.ProduceCar的实现中,我需要将FordOption实例传递给Ford构造函数。我可以通过传递"this"并更改Ford的结构来接受指向FordOptions而不是FordOptions的指针。然而,我希望它按价值,或者至少按参考,采用FordOptions,但很难做到这一点

我敢打赌,这个问题很长,答案很简单。谢谢。

您只需要取消引用this指针。。。根据调用的方法,您可以传递一个引用(如示例中所示),或者通过值

Ford::Ford(const FordOption &o) {}
Ford FordOption::produceCar() {
   return Ford(*this); // <-- Dereference this
}

this是一个常规的旧指针。因此,*this生成一个对this指向的对象的引用,然后可以按照您的意愿传递该引用。

如果您只想通过值或引用路径this,只需使用*this:

return new Ford(*this);

我相信您想要取消引用"this"指针。为此,请将*发送给您的联系人。

所以您有一个CarOption&你认为这实际上是一个FordOption&听起来像是dynamic_cast操作员的工作。