Smart Pointers and other Pointer classes

. You can also find this and other articles at his web site at http://www.wizsoft.com/~poul/srs/

Because copy has different meaning with different classes, there are several pointer classes here.

  • Smart pointers classes. Replace the now obsolete CWizPtr, BaseMultiRefPtr, and MultiRefPtr.(I don't remove them for convenience only). No plain C/C++ pointers again!
    File SmartPointers.h defines the following classes:
    • CWizSmartPtr - trivial base class for all others;
    • CWizSafePtr - smart pointer class which basic garbage collections (i.e. knows to
      delete the pointer in destructor). From here and later every pointer class must hold a pointer allocated from heap only! Copy operator attaches the object to the pointer and then detaches it from previous pointer - "pessimistic shadow copy".
    • CWizSafeArray - simple array of objects.
    • CWizDuplPtr - implements deep copy semantics for copy constructor/operator.
      Requires from an object to have a copy constructor. No polymorphism.
    • CWizClonePtr - implements deep copy semantics for copy constructor/operator, with support for polymorphism in pointed object. Requires from an object to have a Clone() function. In the case of polymorphism a Clone() function must be virtual function returning pointer to the root of hierarchy.
      An example:

      class A
      {
      A(const A& a);
      virtual A* Clone() const { return new A(*this); }
      };

      class B
      {
      B(const B& a);
      virtual A* Clone() const { return new B(*this); }
      };

    • CWizBaseMultiRefPtr - Multiply pointer classes with reference counting and polymorphism.
      Class implements basic machinery of reference counting, but doesn't implement a counter.
      Class CWizMultiRefPtr uses int as counter (the simplest solution).
      Implement garbage collection with reference counting, shadow copy, polymorphism.
    • CWizCounterMultiRefPtr - optimized Multiply pointer classes with reference counting and polymorphism. Differs from CWizBaseMultiRefPtr in implementing reference counting,
      which shifted to the managed class itself. It minimizes memory fragmentation, but requires access to the managed classes, which is not always possible.
       

    File SmartPointersSerialize.h defines StoreSmartPtr() and LoadSmartPtr() functions for serializing to/from MFC CArchive.
    File SmartPointerArrays.h defines arrays of smart pointers. All arrays are derived from CArray of MFC.
    File SmartPointerArraysSerialize.h defines template function SerializeArray() for serializing to/from MFC CArchive.
    File SmartPointerArraysSort.h defines template function SerializeArray() for serializing to/from MFC CArchive.
    File SerializeVersion.h defines function SortSmartPrtArray().

  • Multiply pointer class with reference counting CWizMultiPtr.
    Designed to hold objects of one class (no polymorphism). Several pointers can point to the same object; the object deleted when destroying the last pointer to it. By the nature uses shallow copy.
    File MULTIPTR.H .


  • Comments

    • It's all MFC

      Posted by Legacy on 12/18/2001 12:00am

      Originally posted by: NMTop40

      And it doesn't work when I look at it in the window here (no new-lines)

      Reply
    • Error in example?

      Posted by Legacy on 10/24/2000 12:00am

      Originally posted by: Jesper Rug�rd

      Shouldn't B be declared:

      class B : public A
      {...}

      (or something like that?)

      Reply
    Leave a Comment
    • Your email address will not be published. All fields are required.

    Top White Papers and Webcasts

    • The future of cloud platforms is at hand. Even if your cloud applications are basic now, your next set of apps will require strong analytics services and tools, as well as features that ease enterprise integration. To fill these needs, consider using not only your current cloud provider but also specialists. Take advantage of not only the big cloud platforms, but also specialized providers in vertical industries; countries and regions; and functional domains including omnichannel, analytics, integration, and …

    • Featuring Art Schoeller, VP and Principal Analyst, Forrester Research Wednesday, August 31, 2016 10:00 AM PT | 1 PM ET If Agility Is Essential to Your Business Survival--Now's the Time to Start the Move to Cloud! The maturity of cloud platforms has given organizations new confidence in moving mission-critical systems to the cloud, to gain agility, scale and realize cost benefits in the process. How can your company achieve these benefits, and what steps are necessary to begin your contact center's …

    Most Popular Programming Stories

    More for Developers

    RSS Feeds

    Thanks for your registration, follow us on our social networks to keep up-to-date