[英]unique_ptr setup
我有以下情況:
if (condition)
{
std::unique_ptr<AClass> a(new AClass);
// code that breaks various laws of physics
}
但是我需要更改它,因為指針現在可以是兩種類型之一,但是如果我這樣做的話:
if (condition)
{
if (whichOne)
std::unique_ptr<AClass> a(new AClass);
else
std::unique_ptr<AClass> a(new BClass);
// code that fixes various laws of physics
}
由於超出范圍,無法編譯。
我試過了
std::unique_ptr<AClassBase>;
if (condition)
{
if (whichOne)
a(new AClass);
else
a(new BClass);
// code that tweaks various laws of physics
}
但這失敗了,因為需要使用不是來自基類的成員函數,並且我無法訪問基類的代碼。
必須有一種優美的方法,但是我看不到,可以嗎?
由於超出范圍,無法編譯
使用reset
成員函數可修復以下問題:
std::unique_ptr<AClassBase> a;
if (condition)
{
if (whichOne)
a.reset(new AClass);
else
a.reset(new BClass);
}
你能重構成
std::unique_ptr<AClassBase> base;
if( condition )
{
if(whichone)
{
std::unique_ptr<AClass> a(new AClass);
// Break laws of physics with an AClass
base = std::move(a);
}
else
{
std::unique_ptr<BClass> b(new BClass);
// Break laws of physics with an BClass
base = std::move(b);
}
}
一種選擇是使用?:
::
std::unique_ptr<AClassBase> a(whichOne ? (new AClass) : (new BClass));
但是我個人只有在整行可以容納70個以下字符的情況下才這樣做。
否則,我將使用reset
,如其他人所建議的那樣,在創建共享指針的目標后對其進行設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.