Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取指向已从另一个类实例化的类实例的指针?_C++_Objective C - Fatal编程技术网

C++ 如何获取指向已从另一个类实例化的类实例的指针?

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以获取该实例。然后创建实例(如果尚未创建)。这

我有4个类(C1、C2、C3、C4)使用M1类。M1保存模型和所有数据。M1可以由任何Cx类实例化(如果尚未实例化)。如果是,那么我不想创建它的另一个实例,只需要获取指向存在的M1实例的指针,这样数据就可以在那里使用


我该怎么做?有没有一种方法可以搜索该类的实例?

这看起来像工厂模式,您可以在其中定义一个附加的
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;
}