簡體   English   中英

C++ 初始化時共享成員變量給類的成員實例

[英]C++ Sharing member variables to member instances of classes during initialization

當前使用 C++20。

我試圖在初始化期間將數據從 class A的實例共享到其BC的成員實例。 我沒有使用 getter/setter、單例、依賴項注入等,而是想通過在成員 class 變量的構造函數中將它們作為 arguments 傳遞來共享數據,其中每個成員實例將通過某種方式持有它們的數據份額(例如引用、原始指針、共享指針、void 指針等)。

B類和C旨在始終初始化為 class A的成員。 最終, A應該是數據的最后“所有者”,這樣當A在銷毀過程中被釋放時,共享數據應該與它一起釋放。 考慮到這一點,這些方法中的哪一個是可以接受的? 不違反任何重大規則並確保封裝?

  1. A作為共享指針存儲和傳遞數據。 B & C將 arguments 存儲為共享指針。

  2. A將數據存儲為普通變量,並將它們作為空指針傳遞。 B & C將 arguments 存儲為空指針。

  3. A將數據存儲為普通變量,並將它們作為引用傳遞。 B & C存儲 arguments 作為引用。

  4. A將數據存儲為普通變量,並將它們作為原始指針傳遞。 B & C將 arguments 存儲為原始指針。

偽代碼:

class B
{
private:
  // Some variable that holds the shared data
};

class C
{
private:
  // Some variable that holds the shared data
};

class A
{
  private:
    // Data to be shared to
    B b;
    C c;

    // Data to be shared
    SomeDataType first;
    SomeDataType second;

  public:
    A()
      : b{first, second}, c{first}
    {

    }
};

A作為共享指針存儲和傳遞數據。 B & C 將 arguments 存儲為共享指針。

A擁有數據,沒有共享所有權。 ([...], A應該是數據的最后一個“所有者”,這樣當“A?”在銷毀期間被釋放時,共享數據應該與它一起釋放。”,如果它是最后一個和第一個,那么它可以是唯一的,不需要共享。)

A將數據存儲為普通變量,並將它們作為空指針傳遞。 B & C 將 arguments 存儲為空指針。

不可以void*不是您沒有的問題的解決方案。 在過去必須使用void*時,現在有更好的選擇。 雖然首先這里沒有必要,但這超出了這個答案的 scope。

A將數據存儲為普通變量,並將它們作為引用傳遞。 B & C 存儲 arguments 作為引用。

不,也許是。 引用成員具有含義。 編譯器無法為您生成復制。

A將數據存儲為普通變量,並將它們作為原始指針傳遞。 B & C 將 arguments 存儲為原始指針。

這聽起來很合理。 應該避免原始擁有指針。 一個永遠不會無效的原始非擁有指針(因為所有者在觀察者之后被銷毀)是可以的。 您需要注意的唯一階段是在構建和銷毀期間不要使用尚未有效或不再有效的指針。 值得一提的是,在A構造過程中,可以使用指向成員的指針,但只有在初始化成員之后,您才可以安全地解除對指針的引用。

暫無
暫無

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

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