нули памяти.

operator new() используется со ссылочным типом, пространство для экземпляра размещается в куче, а сама ссылочная переменная помещается в стек. Кроме того, все в экземпляре ссылочного типа, который размещен в куче, обнуляется.
Например вот класс:

class Person
{
    public int id;
    public string name;
}

В следующем коде:

class PersonDemo
{
    static void Main()
    {
        Person p = new Person();
        Console.WriteLine("id: {0}  name: {1}", p.id, p.name);
    }
}

p переменная находится в стеке, и созданный экземплярPerson (все его члены) в куче.p.id было бы0 а такжеp.name было быnull, Это будет иметь место, потому что все, выделенное в куче, обнуляется.

Теперь, что я запутался, если я использую тип значения сnew оператор. Например, примите во внимание следующую структуру:

struct Date
{
    public int year;
    public int month;
    public int day;
}

class DateDemo
{
    static void Main()
    {
        Date someDate;
        someDate= new Date();

        Console.WriteLine("someDate is: {0}/{1}/{2}", 
            someDate.month, someDate.day, someDate.year);
    }
}

Теперь я хотел бы знать, что делают следующие строки из main:

        Date someDate;
        someDate= new Date();

В первой строкеsomeDate переменная размещается в стеке. Точно 12 байтов.
Мой вопрос что происходит на второй строке? Что значитoperator new() делать? Это только обнуление членовDate структура или она также выделяет место в куче? С одной стороны, я бы не ожидалnew выделять место в куче, конечно, потому что в первой строке память уже выделена в стеке для экземпляра структуры. С другой стороны, я бы ожидалnew выделить место в куче и адрес возврата этого пространства, потому что это то, чтоnew следует сделать. Может быть, это потому, что я пришел из C ++ фона.

Тем не менее, если ответ: «когдаnew используется с типами значений, это только обнуляет члены объекта ", чем это немного противоречивое значениеnew оператор потому что:

когда используешьnew с типами значений, он только обнуляет члены объекта в стекекогда используешьnew со ссылочными типами, он выделяет память в куче для экземпляра и очищает его элементы

Заранее спасибо,
ура