- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
提前致谢!
关于 Effective c++ item 4,Scott Meyers 说一旦 main() 退出,所有静态变量/实例都将被销毁。在这里,我们假设单例仅在 main() 中使用。
的确,我们知道如果同时使用下面两种形式的单例,一旦main()退出,实例就会自动销毁。但是下面我想区分两个原因,哪个是释放单例的直接原因?顺便说一句,这两种形式有什么区别?
原因:
普通实例将在 main() 退出后销毁。 (与静态无关)
一旦 main() 退出,所有静态变量/实例将被销毁。
案例 1:
//Singleton.h
class Singleton
{
private:
Singleton();
~Singleton();
public:
Singleton& Instance()
{
Return instance_;
}
static Singleton instance_;
};
//Singleton.c
Singleton Singleton::instance_
实例销毁步骤:
案例 2:
//Singleton.h
class Singleton
{
private:
Singleton();
~Singleton();
public:
Singleton& Instance()
{
static Singleton instance_;
Return instance_;
}
};
实例销毁步骤:
单例的析构函数在程序退出时被调用。
然后析构函数将释放所有成员,但不释放类内的成员。这是原因 1。
然后编译器将释放所有静态变量/实例,包括instance_,这不是类析构函数的工作。这是原因 2。
最佳答案
来自 C++11 标准:
3.6.3 Termination
1 Destructors (12.4) for initialized objects (that is, objects whose lifetime (3.8) has begun) with
static
storage duration are called as a result of returning frommain
and as a result of callingstd::exit
(18.5).
在这两种情况下,单例对象都是static
存储期。
在第一种情况下,对象总是被初始化。对象的析构函数将始终在终止时被调用。
在第二种情况下,只有当 Singleton::Instance()
至少被调用一次时,对象才会被初始化。否则对象将保持未初始化状态。如果对象未初始化,则不会调用对象的析构函数。如果对象被初始化,析构函数将在终止时被调用。
关于c++ - 在 C++ 中,单例(静态实例)一旦程序退出就会被销毁的原因是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33820494/
我最近购买了《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
我是一名优秀的程序员,十分优秀!