00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef NEWNET_OBJECT_H
00021 #define NEWNET_OBJECT_H
00022
00023 #include "nnguardobject.h"
00024 #include "nnrefcounter.h"
00025
00026 #ifdef NN_PTR_DEBUG
00027 #ifdef NN_PTR_DEBUG_ASSERT
00028 #include <assert.h>
00029 #else
00030 #include <iostream>
00031 #endif // NN_PTR_DEBUG_ASSERT
00032 #endif // NN_PTR_DEBUG
00033
00034 namespace NewNet
00035 {
00037
00039 class Object
00040 {
00041 public:
00043
00045 Object()
00046 {
00047 }
00048
00050
00052 Object(const Object &)
00053 {
00054 }
00055
00057
00059 virtual ~Object()
00060 {
00061 m_GuardObject.emit(this);
00062 #ifdef NN_PTR_DEBUG
00063 #ifdef NN_PTR_DEBUG_ASSERT
00064 assert(m_RefCounter.count() == 0);
00065 #else
00066 if(m_RefCounter.count() != 0)
00067 std::cerr << "Warning: Object " << this << " deleted while refcount = " << m_RefCounter.count() << "." << std::endl;
00068 #endif // NN_PTR_DEBUG_ASSERT
00069 #endif // NN_PTR_DEBUG
00070 }
00071
00073
00075 GuardObject & guardObject()
00076 {
00077 return m_GuardObject;
00078 }
00079
00081
00083 RefCounter & refCounter()
00084 {
00085 return m_RefCounter;
00086 }
00087
00088 private:
00089 GuardObject m_GuardObject;
00090 RefCounter m_RefCounter;
00091 };
00092 }
00093
00094 #endif // NEWNET_OBJECT_H