考虑如何在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;的析构函数。我一直在寻找标准参考,但我一直找不到。有人可以通过权威来源明确证实这一点吗?
答案 0 :(得分:7)
[basic.start.term] / P1:
具有线程存储持续时间的初始化对象的析构函数 在给定的线程内被调用作为从...返回的结果 该线程的初始函数以及该线程调用的结果
std::exit
。所有初始化的析构函数的完成 在该线程内具有线程存储持续时间的对象被排序 在用静态启动任何对象的析构函数之前 储存期限。