又是环球球

Globals once again

本文关键字:环球      更新时间:2023-10-16

我知道几乎所有的东西都是关于'全局'的话题。很抱歉回到这里。生产代码中有一些东西,我不完全理解。我将非常感谢在这方面的帮助。所以提前谢谢你。

考虑以下实现:

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函数。相同的全局对象(我认为)在翻译单元中是可见的(至少这是我的期望)。然而(对我来说很神秘),类c-tor似乎被调用了不止一次。有人能详细说明一下吗?

相同的全局对象(我认为)在翻译单元中是可见的(至少这是我的期望)。

不,它只在声明它的翻译单元中"可见",而且似乎只在其中一个翻译单元中声明。

在这种情况下,全局变量被声明为const,这意味着它具有内部链接,所以其他翻译单元即使声明它也不能引用它。

对所有tu可见的是函数,它通过引用返回全局,因此其他tu不能直接引用该对象,但可以通过调用该函数获得对它的引用。

你是对的,构造函数不会被调用超过一次。假定其他代码正在创建相同类型的实例,或者复制该函数返回的实例。

假设const A是一个错别字,而不是const classA A,所提供的代码应该只构造A一次。然而,由于这里没有阻止classA的其他用法,它可能在代码的另一个不可见部分构造。

相关文章: