C++ 如何获取指向已从另一个类实例化的类实例的指针?
我有4个类(C1、C2、C3、C4)使用M1类。M1保存模型和所有数据。M1可以由任何Cx类实例化(如果尚未实例化)。如果是,那么我不想创建它的另一个实例,只需要获取指向存在的M1实例的指针,这样数据就可以在那里使用C++ 如何获取指向已从另一个类实例化的类实例的指针?,c++,objective-c,C++,Objective C,我有4个类(C1、C2、C3、C4)使用M1类。M1保存模型和所有数据。M1可以由任何Cx类实例化(如果尚未实例化)。如果是,那么我不想创建它的另一个实例,只需要获取指向存在的M1实例的指针,这样数据就可以在那里使用 我该怎么做?有没有一种方法可以搜索该类的实例?这看起来像工厂模式,您可以在其中定义一个附加的MFFactory类,该类包含指向M的指针和一个getter方法M*getM()。当Cx类需要M实例时,它们使用getM()查询MFactory以获取该实例。然后创建实例(如果尚未创建)。这
我该怎么做?有没有一种方法可以搜索该类的实例?这看起来像工厂模式,您可以在其中定义一个附加的
MFFactory
类,该类包含指向M
的指针和一个getter方法M*getM()
。当Cx
类需要M
实例时,它们使用getM()
查询MFactory
以获取该实例。然后创建实例(如果尚未创建)。这个设计可能遗漏的是只允许Cx
类查询MFactory
,但是从描述中我得出结论,这不是一个很难满足的要求
另一个问题是如何定义哪些
Cx
类使用哪些M
实例,从而定义它们查询的确切工厂对象。这个工厂类可能是一个单例类,但是所有的Cx
类集都将共享同一个模型(这可能不是您的意图)。或者,每组可以共享一个模型(因此一个MFactory
)。另一种可能的实现是让工厂创建整个Cx
集合,并使用相同的模型对象对其进行初始化,并确保Cx
仅通过该工厂创建。这看起来像工厂模式,在该模式中,您定义了一个额外的MFactory
类,其中包含指向M
的指针,还有一个getter方法M*getM()
。当Cx
类需要M
实例时,它们使用getM()
查询MFactory
以获取该实例。然后创建实例(如果尚未创建)。这个设计可能遗漏的是只允许Cx
类查询MFactory
,但是从描述中我得出结论,这不是一个很难满足的要求
另一个问题是如何定义哪些Cx
类使用哪些M
实例,从而定义它们查询的确切工厂对象。这个工厂类可能是一个单例类,但是所有的Cx
类集都将共享同一个模型(这可能不是您的意图)。或者,每组可以共享一个模型(因此一个MFactory
)。另一种可能的实现是让工厂创建整个Cx
集合,并使用相同的模型对象对其进行初始化,并确保Cx
仅通过该工厂创建。这是以下行为:
让Cn类仅通过该类方法访问M1,您将始终使用同一实例
其他类仍然可以使用+alloc
或+new
以通常的方式创建自己的M1实例。(这就是为什么这是一个伪单例。)
这种共享访问也不一定是M1公共接口的一部分。您可以同样轻松地将其放入仅对Cn类可见的category方法中。这是以下行为:
让Cn类仅通过该类方法访问M1,您将始终使用同一实例
其他类仍然可以使用+alloc
或+new
以通常的方式创建自己的M1实例。(这就是为什么这是一个伪单例。)
这种共享访问也不一定是M1公共接口的一部分。您可以同样轻松地将其放入一个仅对Cn类可见的category方法中。C++或ObjC?它们不一样,我以前在C++中做过,但是不记得怎么做。我在ObjtoE-C编程,但认为C++代码也能工作…不管是……C++还是Objc?它们不一样,我以前在C++中做过,但是不记得怎么做。我在ObjtoE-C编程,但认为C++代码也能工作…不管怎样。。。
+ (instancetype)sharedInstance
{
static id sharedInstance;
static dispatch_once_t token;
dispatch_once(&token, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}