-1
我有對付C++遺留代碼的全部內存泄漏的,而我正在努力解決這些問題,而不重構的一切,我遇到了以下問題:c + +返回靜態分配的派生類對象
abstract_base make_derived(int parameter)
{
switch(parameter)
{
case 1:
return derived1;
break;
case 2:
return derived2;
...
}
}
abstract_base do_something(int parameter)
{
...
auto return_value = make_derived(parameter);
....
return return_value;
}
abstract_base是基類,顯然
derived1,Derived2的,... derivedn從abstract_base
衍生LLVM說RETURN_VALUE是抽象的,不能被實例化。 如何返回不帶指針的派生類對象(在返回動態分配對象之前)/智能指針或任何變通方法?
你不能,因爲爲了複製對象本身(而不是複製指針),它的大小需要在編譯時知道。每個子類可能有不同的大小。你最終會將你的對象切片到基類部分。 'std :: unique_ptr'有什麼問題? – Cameron
參考?衆所周知,無論如何你都會失去派生的對象部分(即使基礎不是抽象的),你需要一個引用(或指針) – deviantfan
掛起,如果這些是靜態分配的對象,爲什麼你需要重寫它?帶指針的代碼不會比引用或對象副本泄漏更多... – Cameron