#include <iostream>
#include <memory>
struct S { S(int val = 0) : i(val) {} int i; };
struct T
{
T(int Sp = 0) { c = std::shared_ptr<S>(new S(Sp)); }
std::shared_ptr<S> c;
};
int main()
{
T objectA(1);
// Points to the same pointer; shared resources
T objectB = objectA;
// Pointers point to same resource
std::cout << std::hex << objectA.c.get() << std::endl;
std::cout << objectB.c.get() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKc3RydWN0IFMgeyBTKGludCB2YWwgPSAwKSA6IGkodmFsKSB7fSBpbnQgaTsgfTsKCnN0cnVjdCBUCnsKCVQoaW50IFNwID0gMCkgeyBjID0gc3RkOjpzaGFyZWRfcHRyPFM+KG5ldyBTKFNwKSk7IH0KCglzdGQ6OnNoYXJlZF9wdHI8Uz4gYzsKCn07CgppbnQgbWFpbigpCnsKCVQgb2JqZWN0QSgxKTsKCgkvLyBQb2ludHMgdG8gdGhlIHNhbWUgcG9pbnRlcjsgc2hhcmVkIHJlc291cmNlcwoJVCBvYmplY3RCID0gb2JqZWN0QTsKCgkvLyBQb2ludGVycyBwb2ludCB0byBzYW1lIHJlc291cmNlCglzdGQ6OmNvdXQgPDwgc3RkOjpoZXggPDwgb2JqZWN0QS5jLmdldCgpIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCBvYmplY3RCLmMuZ2V0KCkgPDwgc3RkOjplbmRsOwp9Cg==