にクラスのコンストラクタに引数のサイズを確認することができます、は、どのように私は、例えば、C++
class Static {
public:
Static(std::vector<int> v) {
if (v.size() ! = 3) {
//...
}
}
~Static() {
std::cout << "Static dtor\n";
}
};
は私がStatic
という名前のクラスがあり、そのコンストラクタはv.size() < 3
場合、私はv
「サイズを確認し、できる方法を引数v
を、持っていますコンストラクタの出口
多くの答えはthrow
を使用して解決できると言いますが、デストラクタが呼び出されないという問題があります。
ので、私はreturn
の例については、大丈夫だろうかどうかを疑問に思う:
class Static {
public:
Static(std::vector<int> v) {
if (v.size() ! = 3) {
//to log some error info
return;
}
}
~Static() {
std::cout << "Static dtor\n";
}
};
のようなあなたのコンストラクタを書き換える方が良いでしょう、オブジェクトは決して内部3の固定サイズで
std:.vector<int>
を管理する想定デストラクタ*は呼び出されないように完全に構築されています。 –
"多くの答えは、例外をスローすることで解決できると言っていますが、問題はデストラクタが呼び出されないことです" - もちろん、デストラクタは呼び出されません - オブジェクトはまだ完全に構築されていません。 –
例外の場合、 '〜Static'は呼び出されませんが、すでに初期化されたメンバーのデストラクタが呼び出されます。 – Jarod42