codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <cstdio> #include <cstddef> #include <cstdlib> #include <cstring> typedef size_t uint; class C { private: uint m_refCnt; public: C(): m_refCnt(1) {printf("C++\n");} virtual ~C() {printf("C--\n");} virtual void Grab() { m_refCnt++; } virtual void Drop() { if (--m_refCnt==0) delete this; } }; class D: public virtual C { protected: uint m_value; public: D(): C(), m_value(0) {printf("D++\n");} virtual ~D() {printf("D--\n");} virtual void SetValue(uint x) { m_value=x; } virtual uint GetValue() const { return m_value; } inline void *operator new(uint n) { printf("new\n"); return malloc(n); } inline void operator delete(void *p) { printf("delete\n"); free(p); } }; int main() { D *p; p = new D(); p->SetValue(42); printf("%u\n", static_cast<unsigned int>(p->GetValue())); p->Drop(); return EXIT_SUCCESS; }
Private
[
?
]
Run code
Submit