#include <iostream>
using namespace std;
class Sample
{
protected:
int * data;
public:
Sample() = delete;
Sample( size_t d )
: data( new int[ d ] ) {
cout << "Sample()" << endl;
}
~Sample() {
delete [] data;
cout << "~Sample()" << endl;
}
};
class SampleSet
{
protected:
Sample* samples;
size_t numOfSamples;
public:
SampleSet() = delete;
SampleSet( size_t n, size_t d )
: samples( (Sample*)operator new( sizeof(Sample)*n ) ),
numOfSamples(n) {
for( ; n; --n ) new (samples+n-1) Sample( d );
}
~SampleSet() {
for( ; numOfSamples; --numOfSamples )
(samples+numOfSamples-1)->~Sample();
operator delete( samples );
}
};
int main() {
SampleSet ss( 10, 100 );
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKY2xhc3MgU2FtcGxlCnsKcHJvdGVjdGVkOgogICAgaW50ICogZGF0YTsKIApwdWJsaWM6CiAgICBTYW1wbGUoKSA9IGRlbGV0ZTsKICAgIFNhbXBsZSggc2l6ZV90IGQgKSAKICAgIDogZGF0YSggbmV3IGludFsgZCBdICkgewogICAgICAgIGNvdXQgPDwgIlNhbXBsZSgpIiA8PCBlbmRsOwogICAgfQogICAgflNhbXBsZSgpIHsgCiAgICAgICAgZGVsZXRlIFtdIGRhdGE7IAogICAgICAgIGNvdXQgPDwgIn5TYW1wbGUoKSIgPDwgZW5kbDsKICAgIH0KfTsKIApjbGFzcyBTYW1wbGVTZXQKewpwcm90ZWN0ZWQ6CiAgICBTYW1wbGUqIHNhbXBsZXM7CiAgICBzaXplX3QgbnVtT2ZTYW1wbGVzOwpwdWJsaWM6CiAgICBTYW1wbGVTZXQoKSA9IGRlbGV0ZTsKICAgIFNhbXBsZVNldCggc2l6ZV90IG4sIHNpemVfdCBkICkgCiAgICA6IHNhbXBsZXMoIChTYW1wbGUqKW9wZXJhdG9yIG5ldyggc2l6ZW9mKFNhbXBsZSkqbiApICksCiAgICAgIG51bU9mU2FtcGxlcyhuKSB7CiAgICAgICAgZm9yKCA7IG47IC0tbiApIG5ldyAoc2FtcGxlcytuLTEpIFNhbXBsZSggZCApOwogICAgfQogICAgflNhbXBsZVNldCgpIHsKICAgICAgICBmb3IoIDsgbnVtT2ZTYW1wbGVzOyAtLW51bU9mU2FtcGxlcyApIAogICAgICAgICAgICAoc2FtcGxlcytudW1PZlNhbXBsZXMtMSktPn5TYW1wbGUoKTsKICAgICAgICBvcGVyYXRvciBkZWxldGUoIHNhbXBsZXMgKTsKICAgIH0KfTsKIAppbnQgbWFpbigpIHsKICAgU2FtcGxlU2V0IHNzKCAxMCwgMTAwICk7CiAgICAKfQ==