문제

나는 우연히 이 코드를 발견했고 작성자에게 이것이 무엇을 의미하는지 물어볼 수 없을 정도로 자랑스럽습니다.

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

무엇인가요 gcnew 단순히 사용하는 것보다 이를 사용하는 것이 얼마나 중요합니까? new?(저는 또한 캐럿 때문에 당황했습니다.나는 그것에 대해 물었다. 여기.)

도움이 되었습니까?

해결책

gcnew .NET 참조 객체를위한 것입니다. GCNEW로 생성 된 객체는 자동으로 쓰레기 수집됩니다. CLR 유형과 함께 gcnew를 사용하는 것이 중요합니다

다른 팁

gcnew 마찬가지로 연산자입니다 new 연산자, 그와 함께 생성 된 것을 삭제할 필요가 없다는 점을 제외하고. 이것의 g러브 모호한. .NET 관리 유형을 생성하는 데 GCNEW를 사용하고 관리되지 않는 유형을 만들기 위해 새로 사용합니다.

캐럿 '^'은 유형을 선언할 때 C/C++의 '*'와 유사하게 작동합니다.

// 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;

관리 개체를 설명할 때 관리 개체를 설명할 때 '포인터'라는 용어를 사용합니다. 관리 개체는 C/C++의 포인터처럼 'nullptr'과 비교할 수 있습니다.C/C++의 참조는 기존 개체의 주소이므로 'nullptr'과 비교할 수 없습니다.

관리되는 개체는 자동 참조 계산을 사용합니다. 즉, 두 개 이상의 연결할 수 없는 개체가 서로를 참조하는 경우에도 여전히 메모리 누수가 발생하지만 참조 횟수가 0일 때 자동으로 삭제됩니다.자동 참조 카운팅은 성능 측면에서 자유롭지 않으므로 현명하게 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top