静态对象(Effective C ++ 3rd Edition中的第4项)

时间:2017-10-22 11:48:11

标签: c++

在第4项(Effective C ++ 3rd Ed。中的第30/31页)中,提供了以下代码示例:

翻译单位1:

  buttons[i]=new Button(this);
    buttons.setId(i);
    buttons[i].setOnClickListener(new View.OnclickListener()
    {
       @Override
       public void onClick(View view){
           buttons[view.getId()].setBackgroundColor(color);
       }
    };

翻译单元2:

class FileSystem {
public:
    ...
    std::size_t numDisks() const;
    ...
};

extern FileSystem tfs;

现在迈耶斯将class Directory { public: Directory( params ); ... }; Directory::Directory( params ) { ... std::size_t disks = tfs.numDisks(); ... } Directory tempDir( params ); 称为静态对象。 (第31页,第2段)

  

tempDirtfs是由{。}创建的   不同的人在不同的时间在不同的源文件 - 他们是   在不同的翻译单元中定义的非本地静态对象。

显然tempDir是静态的,因为它是用extern声明的,但为什么hack应该tfs是静态的?

1 个答案:

答案 0 :(得分:4)

static在C ++中也有很多含义。这意味着tempDir在静态数据区域中定义,在任何函数之外。

它不是动态分配的,也不是本地自动存储变量。