What is gcnew?

后端 未结 3 1550
情书的邮戳
情书的邮戳 2020-12-08 13:18

I stumbled across this code and am too proud to go and ask the author what it means.

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerato         


        
相关标签:
3条回答
  • 2020-12-08 13:31

    gcnew is an operator, just like the new operator, except you don't need to delete anything created with it; it's garbage collected. You use gcnew for creating .Net managed types, and new for creating unmanaged types.

    0 讨论(0)
  • 2020-12-08 13:39

    The caret '^' acts simarly to the '*' in C/C++ when declaring a type;

    // pointer to new std::string object -> memory is not garbage-collected
    std::string* strPtr = new std::string;
    
    // pointer to System::String object -> memory is garbage-collected
    System::String^ manStr = gcnew System::String;
    

    I use the term 'pointer' when describing the managed object as a managed object can be compared to 'nullptr' just like a pointer in C/C++. A reference in C/C++ can not be compared to 'nullptr' as it is the address of an existing object.

    Managed objects use automatic-reference-counting meaning that they are destroyed automatically when they have a reference count of zero although if two or more unreachable objects refer to eachother, you will still have a memory leak. Be warned that automatic reference counting is not free performance wise so use it wisely.

    0 讨论(0)
  • 2020-12-08 13:44

    gcnew is for .NET reference objects; objects created with gcnew are automatically garbage-collected; it is important to use gcnew with CLR types

    0 讨论(0)
提交回复
热议问题