我一直在使用原始指针进行依赖注入,我决定将我的代码转换为使用 shared_ptr。这可行,但我想知道是否可以使用 unique_ptr 代替?在下面的示例中,MyClass 将管理信用卡服务的生命周期。
class PaymentProcessor
{
PaymentProcessor(?? creditCardService):
:creditCardService_(creditCardService)
{
}
private:
CreditCardService *creditCardService_;
}
class MyClass
{
public:
void DoIt()
{
creditCardService_.reset(new VisaCardService());
PaymentProcessor pp(creditCardService_);
pp.ProcessPayment();
}
private:
std::unique_ptr<CreditCardService> creditCardService_;
}
您可以将 unique_ptr 传递给另一个类,而另一个类只是“使用”指针(不拥有它??)?如果是这样,这是一个好主意吗?PaymentProcessor 的构造函数中的参数类型应该是什么?
更新
在如上所示的示例中,我也可以VisaCardService
在堆栈上创建一个变量,并让PaymentProcessor
构造函数将其作为参考参数。这似乎是推荐的 C++ 实践。然而,如果 creditCardService_ 的具体类型直到运行时才知道(例如,用户选择在运行时使用的特定信用卡服务),使用std::unique_ptr
with references 是最好的解决方案吗?