簡體   English   中英

基類和子類中“使用Shared = std::shared_ptr<>”的問題

[英]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 )。

我往往有APtrBPtr如在相同的命名空間類型別名AB分別,只是使用std::shared_ptr<A>內部A類,和std::shared_ptr<B>內部B類。

如果您真的喜歡std::shared_ptr<X>X::Shared模式,那么您需要始終將其作為類定義中的第一個聲明,然后避免像您在此處看到的那樣損壞的可能性。

暫無
暫無

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

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