나는 C에서 당신이 스택에 클래스의 인스턴스를 만들 수 있습니까?
MyClass mc = MyClass(8.2);
또는
MyClass * mc = new MyClass(8.2);
같은 힙은 C#에서 같은 일을 할 수에
같은 스택에 클래스의 인스턴스를 만들 수 있습니다 ++ 알아? C#에서 클래스를 만드는 유일한 방법은new
입니다.
나는 C에서 당신이 스택에 클래스의 인스턴스를 만들 수 있습니까?
MyClass mc = MyClass(8.2);
또는
MyClass * mc = new MyClass(8.2);
같은 힙은 C#에서 같은 일을 할 수에
같은 스택에 클래스의 인스턴스를 만들 수 있습니다 ++ 알아? C#에서 클래스를 만드는 유일한 방법은new
입니다.
아니요, 불가능합니다. 모든 클래스의 모든 인스턴스는 항상 힙에 할당됩니다.
변수가 값을 저장하는 위치 (힙이 아닐 수도 있음)에 값을 저장할 수있는 다른 값을 참조하지 않고 값을 보유하는 값 형식입니다 (사용자 정의 struct
형식 포함).
"모든 클래스의 모든 인스턴스는 항상 힙에 할당됩니다." 완전하고 항상 100 % 사실입니까? 필자가 알기로 합리적인 CLR 구현을 위해서는 힙에있을지라도 실제로 실제 저장 위치를 모르는 것입니다. –
@ Dan 그들은 일생을 알 수없는 객체를 저장하기위한 "다른 위치"에 할당됩니다. CLR은 해당 위치를 "힙"이라고 부릅니다. – Servy
나는 @Dan에 동의합니다. CLR은 예를 들어 스택에서 로컬로만 사용되는 인스턴스를 만들 때 무료라는 것을 기억합니다. –
https://blogs.msdn.microsoft.com/ericlippert/2009/04/27/the-stack-is-an-implementation-detail-part-one/ –
"on-the-stack- like semantics "를 C++/CLI와 함께 사용합니다. –
의미는 단지 개체가 아직 GC 힙에 있습니다. RAII 패턴을 구하기 위해 발명되었습니다. 대개 실패로 인해 결국 프로그래머는 모자를 사용하고 너무 비효율적 인 코드를 너무 자주 작성하도록 혼란스럽게 만듭니다. –