Difference AutoFree::Set and Assign



  • On 22/06/2018 at 10:01, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   R19 
    Platform:      
    Language(s) :     C++  ;

    ---------
    Hi,

    In the past I have only had to use the constructor of an AutoFree. Thus passing the object in the AutoFree constructor.
    Now, I need to assign an object and was wondering what the difference would be between

    AutoFree::Set
    AutoFree::Assign

    The documentation mentions the same for both.
    Does both free an already assigned object when assigning/setting a new object, or should I first free the existing object (after a Release()) and then perform an Assign/Set?



  • On 25/06/2018 at 10:12, xxxxxxxx wrote:

    Hi Daniels,

    In fact, Set And Assign are internally the same functions. But we have both for some historical reason.
    So is up to use whatever you want.

    AutoFree is a smart pointer, based on scope. So they do not free the "old" pointer when the pointer is defined by Set/Assign. So you have to do it yourself by calling Release + Free of the returned pointer.

    Cheers,
    Maxime



  • On 25/06/2018 at 11:31, xxxxxxxx wrote:

    Thanks Maxime,
    I had wished this information to be part of the documentation. As it really wasn't clear what the class does with the "old" pointer.

    Am I correct to assume that AutoAlloc, AutoNew, AutoPtr all work the same? You need to release and free the old pointed object before assigning a new one
    These will only automatically delete the pointed object when going out of scope.



  • On 26/06/2018 at 02:45, xxxxxxxx wrote:

    Thanks for your feedback, it will be added to the documentation.

    And yes your assumption is right.


Log in to reply