我们说我有这个代码(最小例子):
class ImportantClass(){
public:
ImportantStuff(){};
~ImportantStuff(){};
someVector importantStuff1;
someStruct importantStuff2;
someType importantStuff3;
someClass importantStuff4;
void fillImportantStuff(){
//...do stuff
}
};
class ClassA{
public:
ClassA(){};
~ClassA(){};
//...functions that need access to "importantStuff1,2,3,4"
};
int main(){
ImportantClass importantObject;
importantObject.fillImportantStuff();
ClassA object1;
ClassA object2;
ClassA object3;
ClassA object4;
return 0;
}
用语言说:
我有一个类(ImportantClass),其中我可能只有一个对象包含一些不同的变量。然后我有另一个类(ClassA),其中我将有许多对象。 这些对象中的每一个都应该可以访问对象中的变量" importantObject"。
我试过了:
class ClassA{
private:
ImportantClass* _importantClassObject;
public:
ClassA(ImportantClass* x){_importantClassObject = x;};
~ClassA(){};
//...functions that need access to "_importantClassObject"
};
但是当我创建一个ClassA对象时:
ImportantClass importantObject;
importantObject.fillImportantStuff();
ClassA object1(&importantObject);
我得到一个参数列表不匹配错误。
我想我的问题可归结为:
共享一个拥有大量数据的对象与不同类的多个对象的常见做法是什么?
答案 0 :(得分:1)
指针应该可以工作,但问题是你最终不知道谁负责清理那个共享对象。此外,当您的共享类甚至超过ClassA
使用时,您需要修改许多使用者和类。
当跨多个(可能也是不同的)类共享数据时,Singleton模式很有用。一个很好的例子就是这里接受的答案:C++ Singleton design pattern
这个想法是你有一个类,它有一个静态访问器方法(通常类似于SingletonClass::GetInstance();
)到程序中该类的单个实例,并隐藏构造函数以进行外部访问。然后,您可以从任何地方使用该方法来访问具有该类的相同成员和方法的完全相同的类intance(因为只有globablly)。 :)