私は生のポインターを使用して依存性注入を行っていましたが、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
参照を使用して最適なソリューションを使用していますか?