2017-02-03 12 views
0

나는 C에서 당신이 스택에 클래스의 인스턴스를 만들 수 있습니까?

MyClass mc = MyClass(8.2); 

또는

MyClass * mc = new MyClass(8.2); 

같은 힙은 C#에서 같은 일을 할 수에

같은 스택에 클래스의 인스턴스를 만들 수 있습니다 ++ 알아? C#에서 클래스를 만드는 유일한 방법은 new입니다.

+2

https://blogs.msdn.microsoft.com/ericlippert/2009/04/27/the-stack-is-an-implementation-detail-part-one/ –

+1

"on-the-stack- like semantics "를 C++/CLI와 함께 사용합니다. –

+1

의미는 단지 개체가 아직 GC 힙에 있습니다. RAII 패턴을 구하기 위해 발명되었습니다. 대개 실패로 인해 결국 프로그래머는 모자를 사용하고 너무 비효율적 인 코드를 너무 자주 작성하도록 혼란스럽게 만듭니다. –

답변

2

아니요, 불가능합니다. 모든 클래스의 모든 인스턴스는 항상 힙에 할당됩니다.

변수가 값을 저장하는 위치 (힙이 아닐 수도 있음)에 값을 저장할 수있는 다른 값을 참조하지 않고 값을 보유하는 값 형식입니다 (사용자 정의 struct 형식 포함).

+2

"모든 클래스의 모든 인스턴스는 항상 힙에 할당됩니다." 완전하고 항상 100 % 사실입니까? 필자가 알기로 합리적인 CLR 구현을 위해서는 힙에있을지라도 실제로 실제 저장 위치를 ​​모르는 것입니다. –

+0

@ Dan 그들은 일생을 알 수없는 객체를 저장하기위한 "다른 위치"에 할당됩니다. CLR은 해당 위치를 "힙"이라고 부릅니다. – Servy

+1

나는 @Dan에 동의합니다. CLR은 예를 들어 스택에서 로컬로만 사용되는 인스턴스를 만들 때 무료라는 것을 기억합니다. –