sending again

On Thu, Mar 14, 2013 at 5:36 PM, Kevin Peterson <qh.res...@gmail.com> wrote:

> Got the following code for the pointer reference counting in C++, but the
> answer is not as expected. Looks I am doing something wrong. Please help.
>
> #include **
>
> using namespace std;
>
> template **class RefCountPtr {
> public:
> explicit RefCountPtr(T* p = NULL) {
> Create(p);
> }
>
> RefCountPtr(const RefCountPtr**& rhs) {
> Copy(rhs);
> }
>
> RefCountPtr**& operator=(const RefCountPtr**& rhs) {
> if(ptr_ != rhs.ptr_) {
> Kill();
> Copy(rhs);
> }
> return *this;
> }
>
> RefCountPtr**& operator=(T* p) {
> if(ptr_ != p) {
> Kill();
> Create(p);
> }
> return *this;
> }
> ~RefCountPtr() {
> Kill();
> }
> T* Get() const {
> return ptr_;
> }
>
> T* operator->() const {
> return ptr_;
> }
>
> T& operator* () const {
> return *ptr_;
> }
>
> int GetCount() { return *count_; }
> private:
> T* ptr_;
> int* count_;
>
> void Create(T* p) {
> ptr_ = p;
> if(ptr_ != NULL) {
> count_ = new int;
> *count_ = 1;
> } else {
> count_ = NULL;
> }
> }
>
> void Copy(const RefCountPtr**& rhs) {
> ptr_ = rhs.ptr_;
> count_ = rhs.count_;
> if(count_ != NULL)
> ++(*count_);
> }
>
> void Kill() {
> if(count_ != NULL) {
> if(--(*count_) == 0) {
> delete ptr_;
> delete count_;
> }
> }
> }
> };
>
> void main()
> {
>
> int* pFirstInt = new int;
>
> RefCountPtr** refPointer(pFirstInt);
>
> cout << "count: " << refPointer.GetCount() << std::endl;
>
> RefCountPtr** refSecondPointer = refPointer; // this calls copy
> constructor.
>
> cout << "second count: " << refSecondPointer.GetCount() << std::endl;
>
> RefCountPtr** refThirdPointer;
> refThirdPointer = pFirstInt;
> std::cout << "Third pointer: " << refThirdPointer.GetCount() << std::endl;
>
> RefCountPtr** refFourthPointer;
> refFourthPointer = refSecondPointer;
>
> cout << "Fourth count: " << refFourthPointer.GetCount() << std::endl;
>
> return;
> }
>
> Above program is giving the following output.
> count: 1
> second count: 2
> Third pointer: 1
> Fourth count: 3
>
_______________________________________________
help-gplusplus mailing list
help-gplusplus@gnu.org
https://lists.gnu.org/mailman/listinfo/help-gplusplus

Reply via email to