次のルールに出くわしました (3.7.1/2 N3797):
静的ストレージ期間を持つ変数に初期化または副作用のあるデストラクタがある場合、未使用のように見えても削除してはなりません。ただし、クラス オブジェクトまたはそのコピー/移動は、12.8 で指定されているように削除できます。
副作用のあるコンストラクタまたはデストラクタを持つ静的ストレージ期間を持つ変数を宣言すると、その変数が使用されていない場合でも、メモリがその変数に割り当てられるというのは本当ですか?
特に、次のコードを試してみます。
#include <csignal>
#include <iostream>
#include <cstdlib>
using std::cout;
struct data_member
{
data_member(){ cout << "data_member\n"; }
~data_member(){ cout << "~data_member\n"; }
};
struct Y
{
static data_member m;
Y(){ cout << "Y\n"; }
~Y(){ cout << "~Y\n"; }
};
Y y;
int main()
{
}
この例で data_member オブジェクトが構築されないのはなぜですか?