#include <iostream>
struct X
{
X() { std::cout << "X ctor\n"; }
~X() { std::cout << "X dtor\n"; }
};
struct M
{
M()
{
if( ++cnt == 1) x = new X;
}
~M()
{
if( !--cnt ) delete x;
}
private:
static int cnt;
static X* x;
};
int M::cnt = 0;
X* M::x = nullptr;
int main() {
{
M m;
M m2;
}
M* mp = new M;
M m3;
delete mp;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IFggCnsKCVgoKSB7IHN0ZDo6Y291dCA8PCAiWCBjdG9yXG4iOyB9Cgl+WCgpIHsgc3RkOjpjb3V0IDw8ICJYIGR0b3JcbiI7IH0KfTsKCnN0cnVjdCBNCnsKCU0oKSAKCXsgCgkJaWYoICsrY250ID09IDEpIHggPSBuZXcgWDsKCX0KCX5NKCkKCXsKCQlpZiggIS0tY250ICkgZGVsZXRlIHg7Cgl9CnByaXZhdGU6CglzdGF0aWMgaW50IGNudDsKCXN0YXRpYyBYKiB4Owp9OwoKaW50IE06OmNudCA9IDA7ClgqIE06OnggPSBudWxscHRyOwoKaW50IG1haW4oKSB7CgkKCXsKCQlNIG07CgkJTSBtMjsKCX0JCgkKCU0qIG1wID0gbmV3IE07CgkKCU0gbTM7CgkKCWRlbGV0ZSBtcDsKCQoJcmV0dXJuIDA7Cn0=