#include <iostream>
#include <memory>
#include <thread>
#include <chrono>
struct Vec
{
double x, y, z;
};
int main()
{
Vec* vec = new Vec{ 0,0,0 };
std::shared_ptr<Vec> shvec{ new Vec{0,0,0} };
std::this_thread::sleep_for(std::chrono::milliseconds{1000});
double work;
const int count = 10000;
std::chrono::high_resolution_clock::time_point time, lastTime;
lastTime = std::chrono::high_resolution_clock::now();
for( int i=0; i<count; ++i )
{
work = shvec->y;
shvec->z = work;
}
time = std::chrono::high_resolution_clock::now();
std::cout << " shared pointer: " << (time - lastTime).count() << std::endl;
lastTime = std::chrono::high_resolution_clock::now();
for( int i=0; i<count; ++i )
{
work = vec->y;
vec->z = work;
}
time = std::chrono::high_resolution_clock::now();
std::cout << "standard pointer: " << (time - lastTime).count() << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8Y2hyb25vPgogCiAKc3RydWN0IFZlYwp7CiAgICBkb3VibGUgeCwgeSwgejsKfTsKIAogCmludCBtYWluKCkKewogICAgVmVjKiB2ZWMgPSBuZXcgVmVjeyAwLDAsMCB9OwogICAgc3RkOjpzaGFyZWRfcHRyPFZlYz4gc2h2ZWN7IG5ldyBWZWN7MCwwLDB9IH07CiAKICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2ZvcihzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzezEwMDB9KTsKIAogICAgZG91YmxlIHdvcms7CiAgICBjb25zdCBpbnQgY291bnQgPSAxMDAwMDsKICAgIHN0ZDo6Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6OnRpbWVfcG9pbnQgdGltZSwgbGFzdFRpbWU7CgogICAgbGFzdFRpbWUgPSBzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsKICAgIGZvciggaW50IGk9MDsgaTxjb3VudDsgKytpICkKICAgIHsKICAgICAgICB3b3JrID0gc2h2ZWMtPnk7CiAgICAgICAgc2h2ZWMtPnogPSB3b3JrOwogICAgfQogICAgdGltZSA9IHN0ZDo6Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwogICAgc3RkOjpjb3V0IDw8ICIgIHNoYXJlZCBwb2ludGVyOiAiIDw8ICh0aW1lIC0gbGFzdFRpbWUpLmNvdW50KCkgPDwgc3RkOjplbmRsOwoKIAogICAgbGFzdFRpbWUgPSBzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsKICAgIGZvciggaW50IGk9MDsgaTxjb3VudDsgKytpICkKICAgIHsKICAgICAgICB3b3JrID0gdmVjLT55OwogICAgICAgIHZlYy0+eiA9IHdvcms7CiAgICB9CiAgICB0aW1lID0gc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCk7CiAgICBzdGQ6OmNvdXQgPDwgInN0YW5kYXJkIHBvaW50ZXI6ICIgPDwgKHRpbWUgLSBsYXN0VGltZSkuY291bnQoKSA8PCBzdGQ6OmVuZGw7CgoJcmV0dXJuIDA7Cn0=