class T {
public :
explicit T(int i) { printf("ctor: %s, data: %d\n", __FUNCSIG__, i );
}
static T s_singleton(0);
};
void foo(void)
{
static T the_singleton(1);
}
int main() { // foo(); return 0; }; |
main函数中, 是否调用foo, 对于是否产生参数为1 的那个foo内部的局部静态对象, 关系重大. 一直以来我还都以为函数内部的局部静态对象与文件范围内的静态对象只是可见性上的不同.
对于builtin类型, 至少对程序员可见的行为上, 这没有差别, 因为builtin类型, 或POD 类型, 没有任何相当于ctor的代码被执行.
但对于一般性的自定义类, 尤其是拥有显式ctor的类型, 程序行为又依赖于ctor的调用者, 比如在ctor中统计对象产生的个数. 这个差别是需要另作考虑的.
More Effective C++, Item 26
阅读(764) | 评论(0) | 转发(0) |