#include #include #include #include #include #include #include namespace { const long long NS_IN_SEC = 1000000000; long long getTimeNS() { timespec ts; clock_gettime(CLOCK_REALTIME, &ts); return ((ts.tv_sec * NS_IN_SEC) + ts.tv_nsec); } long long numCallsToTestDestructor = 0; struct Test { Test() { } ~Test() { ++numCallsToTestDestructor; } }; } int main(int argc, char** argv) { const int iterations = 10000; std::vector deltaNSVector; deltaNSVector.reserve(iterations); for (int i = 0; i < iterations; ++i) { const long long startTimeNS = getTimeNS(); boost::shared_ptr p(new Test); for (int j = 0; j < 10; ++j) { boost::shared_ptr p2(p); boost::weak_ptr pw(p); boost::shared_ptr p3(pw); } const long long endTimeNS = getTimeNS(); deltaNSVector.push_back(endTimeNS - startTimeNS); } const long long sum = std::accumulate(deltaNSVector.begin(), deltaNSVector.end(), 0); const double average = ((double)sum) / iterations; std::cout << "average time ns = " << average << std::endl; std::cout << "numCallsToTestDestructor = " << numCallsToTestDestructor << std::endl; return 0; }