2017-02-03 2 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- как семантика "с C++/CLI. –

+1

Это только семантика, объекты все еще живут на куче GC. Предназначен для спасения образца RAII. В значительной степени неудача, окончательно запутывающие программисты о том, когда использовать шляпу и заставить их писать очень неэффективный код, который слишком часто используется. –

ответ

2

Нет, это невозможно. Все экземпляры всех классов всегда выделяются в кучу.

Это типы значений, в том числе определяемые пользователем struct типы, содержащие значения, а не ссылки на значения в других местах, которые могут хранить значение в любом месте, в котором происходит переменная, чтобы сохранить его значение, которое может не быть кучей.

+2

«Все экземпляры всех классов всегда выделяются в куче». что полностью и полностью всегда 100% верно? Я понимаю, что мы действительно не знаем местоположение * фактического * хранения, хотя для любой разумной реализации CLR он будет находиться в куче. –

+0

@ Dan Они выделяются в «другом месте» для хранения объектов с неизвестным временем жизни. CLR называет это местоположение «кучей». – Servy

+1

Я согласен с @Dan. Я помню, что CLR является бесплатным, например, для создания экземпляров, которые используются только локально (в локальных переменных) в стеке. –

Смежные вопросы