我知道几乎所有内容都是在“全局”主题上说过的。抱歉回到这里。生产代码中有一些东西,我不完全理解。非常感谢帮助。所以,提前谢谢。
考虑以下实施:
file1.h
class classA
{
classA();
// something in
};
const classA& GetClassA();
file1.cpp
classA::ClassA()
{
cout << "I have been called";
// do initialization
}
const classA obA;
const classA& GetClassA() { return obA; }
全面调用GetClassA函数。翻译单元可以看到相同的全局对象(我认为)(至少这是我的期望)。然而(神秘地对我来说)它看起来像classA c-tor不止一次被调用。任何人都可以详细说明一下吗?
答案 0 :(得分:3)
假设const A是一个拼写错误而不是const classA A,所提供的代码应该只构造一次A.但是,由于此处没有任何内容可以阻止classA的其他用法,因此它可能会在另一个看不见的代码中构建。
答案 1 :(得分:3)
在翻译单元中可以看到相同的全局对象(我认为)(至少这是我的期望)。
不,它只是在声明它的翻译单元中“可见”,而且它似乎只在其中一个声明。
在这种情况下,全局声明为const
,这意味着它具有内部链接,因此其他翻译单元即使声明它也无法引用它。
所有TU可见的是函数,它通过引用返回全局,因此其他TU不能直接引用该对象,但是可以通过调用它来获取对它的引用。功能
你是对的,不过不会多次调用构造函数。据推测,其他代码正在创建相同类型的实例,或者复制该函数返回的实例。