簡體   English   中英

singleton object 在許多類中的多次訪問

[英]Multiple accesses of a singleton object in many classes

我有一個結構,多個類可以訪問和編輯。 所以我在 class 中創建了這個結構的 object 作為 static 並創建了一個 get 方法。 在 Class1.cpp 中:

#include "Class1.h"

static MyStruct struct;

MyStruct* Class1::get_my_struct()
{
      return &struct;
}

我想創建這個類的 object 作為 singleton 以保證這個結構可以通過單個 object 訪問。

在 Class2.cpp 中:

#include "Class2.h"  //Class1.h file included in this file.

void Class2::log_value()
{

Class1& singleton_obj_cls1 = Class1::getObject(): //return singleton object

singleton_obj_cls1 .get_my_struct().tempr_val=log_temp_val(); //log this value of struct by class 2 method

}

void Class2::change_value()
 {

    Class1& singleton_obj_cls1 = Class1::getObject(): 

    //Do I have to get the singleton object for different methods even though they are in the same class? 
   //Can a singleton object get in one place in class and the whole class use it as a class member?
        
        singleton_obj_cls1 .get_my_struct().tempr_val=45;
        singleton_obj_cls1 .get_my_struct().x_val=66 ; 
    }

我有 class 3 class 使用 class1 和 class 2.順便說一句,我將 class2`constructor 更改為 Z277500A3552963

在 Class3.cpp 中:

 #include "Class3.h" //Both Class1.h and Class2.h file included in this file.

void Class3::calculate_value()
{
 Class1& singleton_obj_cls1 = Class1::getObject(): 

 Class2& singleton_obj_cls2 = Class2::getObject():


singleton_obj_cls2.log_value();  

singleton_obj_cls1.get_my_struct().pressure_value=300;


}

我的第三個問題是,是否有更好的設計方法可以修復,而不是在使用每個結構之前在多個位置獲取 singleton 對象,或者我應該在頂部 ZA2F2ED4F8EBC2CBB4C21A209DC40AB601D 方法中創建一次 object 並將其作為參數應該有權訪問此結構的不同類?

  1. 我是否必須為不同的方法獲得 singleton object,即使它們在同一個 class 中?
  2. Can a singleton object get in one place in class and the whole class use it as a class member?

在 header 文件中使用成員變量,並在構造函數成員初始化程序列表中對其進行初始化:

示例Class2.h

#include "Class1.h"

class Class2 {

//...

private: // maybe public/protected to access from other classes
Class1& m_singleton_obj_cls1;

};

示例Class2.cpp

#include "Class2.h"

Class2::Class2()
: m_singleton_obj_cls1(Class1::getObject()) {
}

//...

暫無
暫無

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

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