簡體   English   中英

將新對象作為默認參數傳遞給構造函數

[英]Passing new object as default argument to constructor

我有一個看起來像的構造函數:

RandomClass(const int16_t var1, const SecondClass& var2);

我需要將默認參數傳遞給第二個參數,因此目前我正在執行以下操作:

RandomClass(const int16_t var1, const SecondClass& var2 = *(new SecondClass(*(new std::unordered_map<int16_t, double>())));

真是尷尬 請注意,我不想使用重載的構造函數,也不想將第二個參數從引用更改為指針。

傳遞默認參數的一種優雅方式是什么?

您可以將const引用綁定到臨時目錄:

RandomClass(const int16_t var1, const SecondClass& var2 = SecondClass(std::unordered_map<int16_t, double>()));

當然,這假定您將var2復制到成員中,或者在構造函數退出后不使用它。 如果不是這種情況,則說明您的設計有問題。 也許使用原始指針或shared/weak_ptr更合適。

很好地做到這一點的方法是為構造函數提供兩個重載:

RandomClass(const int16_t var1, const SecondClass& var2)
{
  // ...
}

RandomClass(const int16_t var1)
{
  const SecondClass var2 = *(new SecondClass(*(new std::unordered_map<int16_t, double>()));
}

但是,您遇到的問題要比看起來的糟糕得多。 第二次過載中的內容令人難以置信,因為這會導致內存泄漏-您需要delete所有new但現在您丟失了所有new痕跡。 您只需執行以下操作:

RandomClass(const int16_t var1)
{
  const SecondClass var2{std::unordered_map<int16_t, double>()};
}

不要使用new偏好自動存儲時間-除非你要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM