codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
class Stuff { public: Stuff() : m_count(new long unsigned), m_data(new char[1024]) { *m_count = 1; // Fill data with '0' character memset(m_data, '0', 1024); } ~Stuff() { decrement(); } Stuff(const Stuff &other) : m_count(other.m_count), m_data(other.m_data) { ++(*m_count); } Stuff &operator =(const Stuff &other) { if (this != &other) { decrement(); m_count = other.m_count; m_data = other.m_data; ++(*m_count); } return *this; } void setData(int i, char value) { m_data[i] = value; // crude implementation } // for testing purposes only char data(int i) const { return m_data[i]; // crude implementation } // for testing purposes only private: void decrement() { if (!m_count) return; --(*m_count); if (0 == *m_count) { delete m_count; if (m_data) delete[] m_data; m_count = 0; m_data = 0; } } unsigned long *m_count; char *m_data; }; int main(int argc, char **argv) { Stuff obj; Stuff obj2(obj); Stuff obj3; obj3 = obj2; std::cout << obj.data(5) << "\n"; // '0' std::cout << obj2.data(5) << "\n"; // '0' std::cout << obj3.data(5) << "\n"; // '0' obj2.setData(5, 'x'); std::cout << obj.data(5) << "\n"; // 'x' std::cout << obj2.data(5) << "\n"; // 'x' std::cout << obj3.data(5) << "\n"; // 'x' return 0; }
Private
[
?
]
Run code
Submit