- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我只想知道什么时候应该在静态对象上使用单例类,反之亦然。因为 same 可以用来只有一个实例。我可以猜测内存中存储差异的原因之一。有没有其他理由选择一个而不是另一个。
最佳答案
单例和静态对象之间的主要区别在于,单例保证只能有一个特定类类型的实例,而静态对象是只是特定类的单个实例类型。这意味着根本区别在于 类 是否有多个实例。例如,假设您有一个构建小部件的工厂。
class WidgetFactory {
public:
int numberOfWidgetsBuiltInTheWholeApplication();
// returns number_of_widgets_built
std::shared_ptr<Widget> build();
// increments number_of_widgets_built
private:
size_t number_of_widgets_built;
};
我们还假设我们想要保证我们可以确定在整个应用程序中创建的 Widget 的数量,并且强制只有一个 WidgetFactory 是实现此目的的一种简单方法。这是我们将使用单例的地方。如果我们只使用一个静态对象,像这样:
WidgetFactory& theWidgetFactory()
{
static WidgetFactory widget_factory;
return widget_factory;
}
我们无法保证 theWidgetFactory().numberOfWidgetsBuiltInTheWholeApplication()
实际上是真实总数,因为其他人可能会出现并创建他们自己的 WidgetFactory 实例。
但是,如果我们让 WidgetFactory 成为单例,我们现在就有了这种保证。我们可以通过将构造函数设为私有(private)来做到这一点:
class WidgetFactory {
public:
int numberOfWidgetsBuiltInTheWholeApplication();
std::shared_ptr<Widget> build();
private:
WidgetFactory();
WidgetFactory(const WidgetFactory &); // not implemented
friend WidgetFactory& theWidgetFactory();
};
现在只允许 theWidgetFactory()
函数创建实例。还有其他方法可以使 numberOfWidgetsBuiltInTheWholeApplication()
在不使用单例的情况下正常运行,但在某些情况下,解决方案可能更复杂或有其他缺点。
关于c++ - C++中的静态对象与单例类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20829344/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!