mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 18:15:31 +01:00
--HG-- branch : trunk rename : opt/cleanup/tab2spaces.sh => contrib/cleanup/tab2spaces.sh rename : opt/cleanup/whitespace.sh => contrib/cleanup/whitespace.sh rename : opt/conf_merge/README => contrib/conf_merge/README rename : opt/conf_merge/index.php => contrib/conf_merge/index.php rename : opt/conf_merge/merge.php => contrib/conf_merge/merge.php rename : doc/AuctionHouseBot.txt => docs/AuctionHouseBot.txt rename : doc/DocStructure.dox => docs/DocStructure.dox rename : doc/Doxyfile.in => docs/Doxyfile.in rename : doc/EventAI.txt => docs/EventAI.txt rename : doc/HowToScript.txt => docs/HowToScript.txt rename : doc/TextTables.txt => docs/TextTables.txt rename : doc/UnixInstall.txt => docs/UnixInstall.txt rename : externals/jemalloc/include/internal/arena.h => externals/jemalloc/jemalloc/internal/arena.h rename : externals/jemalloc/include/internal/base.h => externals/jemalloc/jemalloc/internal/base.h rename : externals/jemalloc/include/internal/chunk.h => externals/jemalloc/jemalloc/internal/chunk.h rename : externals/jemalloc/include/internal/chunk_dss.h => externals/jemalloc/jemalloc/internal/chunk_dss.h rename : externals/jemalloc/include/internal/chunk_mmap.h => externals/jemalloc/jemalloc/internal/chunk_mmap.h rename : externals/jemalloc/include/internal/chunk_swap.h => externals/jemalloc/jemalloc/internal/chunk_swap.h rename : externals/jemalloc/include/internal/ckh.h => externals/jemalloc/jemalloc/internal/ckh.h rename : externals/jemalloc/include/internal/ctl.h => externals/jemalloc/jemalloc/internal/ctl.h rename : externals/jemalloc/include/internal/extent.h => externals/jemalloc/jemalloc/internal/extent.h rename : externals/jemalloc/include/internal/hash.h => externals/jemalloc/jemalloc/internal/hash.h rename : externals/jemalloc/include/internal/huge.h => externals/jemalloc/jemalloc/internal/huge.h rename : externals/jemalloc/include/internal/jemalloc_internal.h => externals/jemalloc/jemalloc/internal/jemalloc_internal.h rename : externals/jemalloc/include/internal/jemalloc_internal.h.in => externals/jemalloc/jemalloc/internal/jemalloc_internal.h.in rename : externals/jemalloc/include/internal/mb.h => externals/jemalloc/jemalloc/internal/mb.h rename : externals/jemalloc/include/internal/mutex.h => externals/jemalloc/jemalloc/internal/mutex.h rename : externals/jemalloc/include/internal/prof.h => externals/jemalloc/jemalloc/internal/prof.h rename : externals/jemalloc/include/internal/ql.h => externals/jemalloc/jemalloc/internal/ql.h rename : externals/jemalloc/include/internal/qr.h => externals/jemalloc/jemalloc/internal/qr.h rename : externals/jemalloc/include/internal/rb.h => externals/jemalloc/jemalloc/internal/rb.h rename : externals/jemalloc/include/internal/stats.h => externals/jemalloc/jemalloc/internal/stats.h rename : externals/jemalloc/include/internal/tcache.h => externals/jemalloc/jemalloc/internal/tcache.h rename : externals/jemalloc/include/internal/totally_not_p_r_n.h => externals/jemalloc/jemalloc/internal/totally_not_p_r_n.h rename : externals/jemalloc/include/jemalloc.h => externals/jemalloc/jemalloc/jemalloc.h rename : externals/jemalloc/include/jemalloc.h.in => externals/jemalloc/jemalloc/jemalloc.h.in rename : externals/jemalloc/include/jemalloc_defs.h => externals/jemalloc/jemalloc/jemalloc_defs.h rename : externals/jemalloc/include/jemalloc_defs.h.in => externals/jemalloc/jemalloc/jemalloc_defs.h.in
62 lines
1.8 KiB
C++
62 lines
1.8 KiB
C++
/**
|
|
@file ReferenceCount.cpp
|
|
|
|
Reference Counting Garbage Collector for C++
|
|
|
|
@maintainer Morgan McGuire, http://graphics.cs.williams.edu
|
|
@cite Adapted and extended from Justin Miller's "RGC" class that appeared in BYTE magazine.
|
|
@cite See also http://www.jelovic.com/articles/cpp_without_memory_errors_slides.htm
|
|
|
|
@created 2001-10-23
|
|
@edited 2009-04-25
|
|
*/
|
|
#include "G3D/platform.h"
|
|
#include "G3D/ReferenceCount.h"
|
|
|
|
namespace G3D {
|
|
|
|
ReferenceCountedObject::ReferenceCountedObject() :
|
|
ReferenceCountedObject_refCount(0),
|
|
ReferenceCountedObject_weakPointer(0) {
|
|
|
|
debugAssertM(isValidHeapPointer(this),
|
|
"Reference counted objects must be allocated on the heap.");
|
|
}
|
|
|
|
void ReferenceCountedObject::ReferenceCountedObject_zeroWeakPointers() {
|
|
// Tell all of my weak pointers that I'm gone.
|
|
|
|
_WeakPtrLinkedList* node = ReferenceCountedObject_weakPointer;
|
|
|
|
while (node != NULL) {
|
|
// Notify the weak pointer that it is going away
|
|
node->weakPtr->objectCollected();
|
|
|
|
// Free the node and advance
|
|
_WeakPtrLinkedList* tmp = node;
|
|
node = node->next;
|
|
delete tmp;
|
|
}
|
|
}
|
|
|
|
ReferenceCountedObject::~ReferenceCountedObject() {}
|
|
|
|
|
|
ReferenceCountedObject::ReferenceCountedObject(const ReferenceCountedObject& notUsed) :
|
|
ReferenceCountedObject_refCount(0),
|
|
ReferenceCountedObject_weakPointer(0) {
|
|
(void)notUsed;
|
|
debugAssertM(G3D::isValidHeapPointer(this),
|
|
"Reference counted objects must be allocated on the heap.");
|
|
}
|
|
|
|
ReferenceCountedObject& ReferenceCountedObject::operator=(const ReferenceCountedObject& other) {
|
|
(void)other;
|
|
// Nothing changes when I am assigned; the reference count on
|
|
// both objects is the same (although my super-class probably
|
|
// changes).
|
|
return *this;
|
|
}
|
|
|
|
} // G3D
|