#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 = vec->y;
vec->z = work;
}
time = std::chrono::high_resolution_clock::now();
std::cout << "standard pointer: " << (time - lastTime).count() << std::endl;
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;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8Y2hyb25vPgoKCnN0cnVjdCBWZWMKewogICAgZG91YmxlIHgsIHksIHo7Cn07CgoKaW50IG1haW4oKQp7CiAgICBWZWMqIHZlYyA9IG5ldyBWZWN7IDAsMCwwIH07CiAgICBzdGQ6OnNoYXJlZF9wdHI8VmVjPiBzaHZlY3sgbmV3IFZlY3swLDAsMH0gfTsKICAgIAogICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHN7MTAwMH0pOwogICAgCiAgICBkb3VibGUgd29yazsKICAgIGNvbnN0IGludCBjb3VudCA9IDEwMDAwOwogICAgc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6dGltZV9wb2ludCB0aW1lLCBsYXN0VGltZTsKCiAgICBsYXN0VGltZSA9IHN0ZDo6Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwogICAgZm9yKCBpbnQgaT0wOyBpPGNvdW50OyArK2kgKQogICAgewogICAgICAgIHdvcmsgPSB2ZWMtPnk7CiAgICAgICAgdmVjLT56ID0gd29yazsKICAgIH0KICAgIHRpbWUgPSBzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsKICAgIHN0ZDo6Y291dCA8PCAic3RhbmRhcmQgcG9pbnRlcjogIiA8PCAodGltZSAtIGxhc3RUaW1lKS5jb3VudCgpIDw8IHN0ZDo6ZW5kbDsKCiAgICBsYXN0VGltZSA9IHN0ZDo6Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwogICAgZm9yKCBpbnQgaT0wOyBpPGNvdW50OyArK2kgKQogICAgewogICAgICAgIHdvcmsgPSBzaHZlYy0+eTsKICAgICAgICBzaHZlYy0+eiA9IHdvcms7CiAgICB9CiAgICB0aW1lID0gc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCk7CiAgICBzdGQ6OmNvdXQgPDwgIiAgc2hhcmVkIHBvaW50ZXI6ICIgPDwgKHRpbWUgLSBsYXN0VGltZSkuY291bnQoKSA8PCBzdGQ6OmVuZGw7CgoJcmV0dXJuIDA7Cn0=