如果我需要多態性,我應該使用原始指針而不是unique_ptr
?如果我需要多態性,我應該使用原始指針而不是unique_ptr?
我看到一些線程顯示如何使用unique_ptr
多態行爲。 我不確定這是否值得麻煩,我寧願留在原始指針。 您可以對此評論一下,您對這方面的原始指針與智能指針的看法?
如果我需要多態性,我應該使用原始指針而不是unique_ptr
?如果我需要多態性,我應該使用原始指針而不是unique_ptr?
我看到一些線程顯示如何使用unique_ptr
多態行爲。 我不確定這是否值得麻煩,我寧願留在原始指針。 您可以對此評論一下,您對這方面的原始指針與智能指針的看法?
智能指針是關於所有權/生命週期。如果需要管理多態對象的生命週期,請使用智能指針。如果您只是使用該對象,則優先使用智能指針上的原始引用/指針(按此順序)。
使用unique_ptr
來控制分配資源的所有權,例如,在一個函數內部的免費商店中分配並返回一個unique_ptr
。
如果所有權不是問題,那麼只使用多態行爲的參考。即使unique_ptr
也是如此,您可以免除編譯器的額外工作。
如果所有權不是問題,請使用容器內多態行爲的指針。你不能有一個引用的容器。
下面的簡單代碼顯示std::unique_ptr
作品從一個多態性點就好了,印刷"Hello from Derived"
。
#include <iostream>
#include <memory>
using namespace std;
struct Base
{
virtual ~Base() { }
virtual void SayHello()
{
cout << "Hello from Base." << endl;
}
};
struct Derived : public Base
{
void SayHello() override
{
cout << "Hello from Derived." << endl;
}
};
int main()
{
unique_ptr<Base> pBase(new Derived());
pBase->SayHello();
}
反正觀察原始指針是細;你必須注意的是擁有原始指針。擁有原始指針應安全地包裹在RAII邊界內(使用unique_ptr
,shared_ptr
或某些自定義資源管理器)。
不要使用非專用的原始指針。基本上,它們不可能正確使用。 –
這是一個很好的觀點。在我的情況下,我可以保持私密。 – user3111311
你可以指向這些線程嗎? AFAIK在原始指針或'unique_pointer'或'shared_pointer' wrt多態性之間沒有區別。他們都以同樣的方式工作。 – balki