[英]the problem of "using Shared = std::shared_ptr<>" in base class and child class
我只是解決了在基類和子類中“使用共享”導致的錯誤。 像這樣:
class B: public A {
public:
/**
* Attention! This "using Shared" should be located before "using ResCallback " because
* in class A, there is also a "using Shared".
*/
using Shared = std::shared_ptr<B>;
using ResCallback = std::function<void(const C& c, const char* data, size_t size, Shared b)>;
在另一個文件中,有 A 類:
class A {
public:
using Shared = std::shared_ptr<A>;
過去,我將“使用 ResCallback”放在“使用共享”之前,然后它會導致問題。 這讓我懷疑“使用共享”。 有沒有更好的設計風格來避免這個錯誤源?
如您所見,在基類和派生類中具有相同的類型名稱,但引用不同的類型,是潛在的問題根源。
我會避免在兩個類中使用相同的名稱( Shared
)。
我往往有APtr
和BPtr
如在相同的命名空間類型別名A
和B
分別,只是使用std::shared_ptr<A>
內部A
類,和std::shared_ptr<B>
內部B
類。
如果您真的喜歡std::shared_ptr<X>
的X::Shared
模式,那么您需要始終將其作為類定義中的第一個聲明,然后避免像您在此處看到的那樣損壞的可能性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.