#include <iostream>
#include <memory.h>
struct B {
B() { std::cout << "B()" << std::endl; }
~B() { std::cout << "~B()" << std::endl; }
};
int main()
{
std::cout << "start main" << std::endl;
{ // scope
std::cout << "start scope" << std::endl;
B b;
std::cout << "end scope" << std::endl;
} // end scope, b gets auto-destroyed.
std::cout << "end of first example." << std::endl << std::endl ;
{ // scope
std::cout << "start scope" << std::endl;
void* stackStorage = alloca(sizeof(B));
std::cout << "alloca'd" << std::endl;
B* b = new (stackStorage) B();
std::cout << "ctord" << std::endl;
b->~B(); // <-- we're responsible for dtoring this object.
std::cout << "end scope" << std::endl;
} // <-- b gets destroyed here, but it's just a pointer.
std::cout << "end main" << std::endl;
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDxtZW1vcnkuaD4KCiAgICBzdHJ1Y3QgQiB7CiAgICAgICAgQigpIHsgc3RkOjpjb3V0IDw8ICJCKCkiIDw8IHN0ZDo6ZW5kbDsgfQogICAgICAgIH5CKCkgeyBzdGQ6OmNvdXQgPDwgIn5CKCkiIDw8IHN0ZDo6ZW5kbDsgfQogICAgfTsKCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJzdGFydCBtYWluIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgeyAvLyBzY29wZQogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgInN0YXJ0IHNjb3BlIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgIEIgYjsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJlbmQgc2NvcGUiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9IC8vIGVuZCBzY29wZSwgYiBnZXRzIGF1dG8tZGVzdHJveWVkLgogICAgICAgIHN0ZDo6Y291dCA8PCAiZW5kIG9mIGZpcnN0IGV4YW1wbGUuIiA8PCBzdGQ6OmVuZGwgPDwgc3RkOjplbmRsIDsKCiAgICAgICAgeyAvLyBzY29wZQogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgInN0YXJ0IHNjb3BlIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgIHZvaWQqIHN0YWNrU3RvcmFnZSA9IGFsbG9jYShzaXplb2YoQikpOwogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgImFsbG9jYSdkIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgIEIqIGIgPSBuZXcgKHN0YWNrU3RvcmFnZSkgQigpOwogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgImN0b3JkIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgIGItPn5CKCk7IC8vIDwtLSB3ZSdyZSByZXNwb25zaWJsZSBmb3IgZHRvcmluZyB0aGlzIG9iamVjdC4KICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJlbmQgc2NvcGUiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9IC8vIDwtLSBiIGdldHMgZGVzdHJveWVkIGhlcmUsIGJ1dCBpdCdzIGp1c3QgYSBwb2ludGVyLgogICAgICAgIHN0ZDo6Y291dCA8PCAiZW5kIG1haW4iIDw8IHN0ZDo6ZW5kbDsKICAgIH0K