c ++ static vs thread存储持续时间销毁顺序

时间:2015-05-12 20:33:50

标签: c++ multithreading c++11 thread-local-storage storage-duration

考虑如何在c ++中存在这两个存储持续时间(以及其他):static storage duration and thread storage duration.

接下来考虑以下代码:

public class Station
{
    public int Id { get; set; }
    public double Lon { get; set; }
    public double Lat { get; set; }
    public int Bikes { get; set; }
    public int Slots { get; set; }
    public string Address { get; set; }
    [JsonConverter(typeof(StringToIntEnumerable))]
    public IEnumerable<int> NearbyStations { get; set; }  // or List<int> or int[] if 
                                                          // you prefer, just make 
                                                          // sure the convert returns 
                                                          // the same type
    public string Status { get; set; }
    public string Name { get; set; }
}

另外假装&#34; a&#34;和&#34; b&#34;可能不在同一个编译单元中。我相信&#34; &#34; b&#34;的析构函数将被称为&#34; a&#34;因为线程存储持续时间将首先终止,并且只有在完成后,静态存储持续时间才会终止并调用&#34; a&#34;的析构函数。我一直在寻找标准参考,但我一直找不到。有人可以通过权威来源明确证实这一点吗?

1 个答案:

答案 0 :(得分:7)

[basic.start.term] / P1:

  

具有线程存储持续时间的初始化对象的析构函数   在给定的线程内被调用作为从...返回的结果   该线程的初始函数以及该线程调用的结果   std::exit。所有初始化的析构函数的完成   在该线程内具有线程存储持续时间的对象被排序   在用静态启动任何对象的析构函数之前   储存期限。