class XX
{
public:
static unsigned s_cnt;
XX()
{
++ s_cnt;
std::cout << "C XX " << s_cnt << "\n";
if (s_cnt > 2)
throw std::exception();
}
//private:
~XX()
{
std::cout << "~ XX\n";
}
};
unsigned XX::s_cnt = 0;
int main()
{
try
{
XX *xx = new XX[10];
} catch (...)
{
std::cout << "Exc\n";
}
}
आउटपुट:सरणी निर्माण के दौरान सी ++ में एक अपरिचित अपवाद फेंकने वाले विनाशकों को क्यों नहीं बुलाया जाता है?
C XX 1
C XX 2
C XX 3
~ XX
~ XX
Exc
लेकिन जब मैं कोशिश पकड़ निकालने के लिए, मैं देख:
C XX 1
C XX 2
C XX 3
terminate called after throwing an instance of 'std::exception'
what(): std::exception
zsh: abort ./a.out
क्यों सी ++ पहले मामले में विनाशकर्ता फोन है, लेकिन दूसरे में नहीं है?
आप जोड़ सकते हैं कि इसका कारण यह है कि आप कोर डंप में राज्य की जानकारी को खो नहीं देते हैं। –
अच्छा बिंदु, जोड़ा गया। –