2016-11-16 4 views
2

나는 C# 코드에 대한 Process.Start()ProcessStartInfo을 사용 그래서 지금,ProcessStartInfo에 공간을 할당해야합니까?

SHELLEXECUTEINFO shell; 
memset(&shell, 0, sizeof(shell)); 
//the properties in shell are set 
ShellExecuteEx(&shell); 

을하고 전 C#으로 C++ 코드를 포팅하고 있는데는 C++ 코드에서이 우연히 만났다. ProcessStartInfo에 대한 메모리를 할당해야합니까, 아니면 ProcessStartInfo 생성자를 호출 할 때 완료 되었습니까? 그리고 내 호기심을 만족시키기 위해서 C++에서 memset을 사용하는이 방법은 관리되지 않는 언어의 연습인가, 아니면 내가 잘못 이해 한 것입니까?

감사합니다.

답변

2

명시된 바와 같이 ProcessStartInfo obj의 생성자를 new 키워드로 호출하면 .Net 런타임 환경에서 메모리가 할당됩니다.

"관리되는 .Net CLR 언어"의 핵심적인 의미입니다.

다른 질문에 대한 답변은 다음과 같습니다. 예.

"관리되지 않는"언어, C++ 또는 C++뿐만 아니라 개발자 및 컴파일러를 담당하는 메모리 관리가 할당 된 메모리를 초기화하지 않는 더 나은 모든 언어는 인스턴스 생성자 또는 객체 생성자를 호출 한 후, 그렇지 않으면 할당 된 메모리를 초기화하기 위해 내용이 더럽고 런타임 오류가 발생할 수 있습니다. , 즉 당신이 struct 또는 값 형식 변수를 가지고 있기 때문에 특정 경우

, 당신은 간단한 선언하지 않은 SHELLEXECUTEINFO shell; 문 있도록, 생성자를 호출하는 것이 아니라 그것은 진짜 " 변수 정의"입니다 이 문은 메모리 할당을 발생시킵니다.

이제 C++에서 새로운 할당 된 메모리는 항상 초기화되지 않습니다 (대신 "관리"언어는 항상 할당 된 메모리가 초기화) 그래서 항상 정의 "모든 새로운 변수 (값 유형 또는 오브젝트)를 초기화하는 개발자입니다 "(할당 됨)이며 C++에서는 memset 함수가이 작업을 수행합니다.

따라서 C++에서 memset에 대해 언급 한 내용을 사용하는 것이 가장 좋습니다.

+0

감사합니다. 이것은 매우 철저한 대답이었습니다. – skwear

+0

너무 감사합니다. 천만에요 –

6

C#은 관리되는 언어이므로 ProcessStartInfo 개체를 만들 때 명시 적으로 메모리를 제공 할 필요가 없습니다.

관련 문제