将指向单例的指针分配给对象字段

Posted

技术标签:

【中文标题】将指向单例的指针分配给对象字段【英文标题】:Assigning Pointer to singleton to object field 【发布时间】:2011-01-03 22:38:54 【问题描述】:

我有一个单例(命名为 Context),当然还有一个 getInstance 方法,它返回指向单个实例的静态指针。

在其他类中使用此实例时,我一直在使用 Context::getInstance() 函数。但由于我已经在同一个控制器类中调用该方法数十次,因此我一直在寻找更直接的解决方案。

我可以在我的控制器类中创建一个 Context* 类型的额外字段,并通过调用一次 Context::getInstance() 在我的控制器的构造函数中将单例分配给它吗?或者指针本身会在程序生命周期内发生变化吗?

【问题讨论】:

如果 getInstance() 永远不会返回 NULL 那么为什么不返回一个引用。 【参考方案1】:

如果您使用的是单例,它应该在程序的生命周期内保持相同的对象,因此这应该是安全的。如果你自己编写了这个类,那么你应该可以很容易地检查出情况是否如此。

【讨论】:

【参考方案2】:

不改就不行了

另一种解决方案可能是:

上下文*上下文() 返回上下文::getInstance();

【讨论】:

【参考方案3】:

是的,您可以,但您的解决方案并不安全 - 您可能会在第一次调用 getInstance 方法之前错误地访问此额外字段。您最好将getInstance 返回的指针存储在您的“Controller”类中的某个位置。

【讨论】:

ZuulViewController::ZuulViewController(QObject *parent): QObject(parent), theContext(Context::getInstance()) 这应该是安全的吗?既然不调用getInstance就无法创建Context对象?

以上是关于将指向单例的指针分配给对象字段的主要内容,如果未能解决你的问题,请参考以下文章

将第二个指针分配给第一个指针指向的对象

将指针分配给字符串对象的第一个和最后一个索引

将指向原子类型的指针分配给指向非原子类型的指针

将指向结构的指针分配给变量

如何将由三重指针组成的矩阵动态分配给一个类?

单例模式