#pragma once ///////////////////////////////////////////////////////////////////// // ILifeTime.h - Component LifeTime management demo // // // // Application: Demo for CSE775 - Distributed Ojects, Project #1 // ///////////////////////////////////////////////////////////////////// #ifdef LIFETIME_EXPORTS #define LIFETIME_API __declspec(dllexport) #else #define LIFETIME__API __declspec(dllimport) #endif /////////////////////////////////////////////////////////////// // surpresses inappropriate warning about atomic visability #pragma warning (disable : 4251) /////////////////////////////////////////////////////////////// struct LIFETIME_API ILifeTime { virtual ~ILifeTime() {} virtual size_t AddRef()=0; virtual size_t Release()=0; }; #include #include class LIFETIME_API LifeTimeBase : public ILifeTime { public: LifeTimeBase() { refCount.store(0); } virtual ~LifeTimeBase() { std::cout << "\n destroying LifeTimeBase instance\n"; } virtual size_t AddRef() { ++refCount; return refCount.load(); } virtual size_t Release() { --refCount; if (refCount.load() == 0) { delete this; return 0; } return refCount.load(); } private: std::atomic refCount; };