Об операциях для нового оператора - PullRequest
1 голос
/ 05 мая 2011

Если в моем классе Test есть пользовательский конструктор по умолчанию, и какие операции будут выполняться с помощью следующего оператора:

Test *test = new Test; //there is no () after new Test

Во-первых, означает ли конструктор по умолчанию пользователя «конструктор без параметров»?например:

class Test {
     public:
             Test() {
              // do something here
             }
}

поэтому новый тест;означает, что компилятор вызовет конструктор Test () в классе Test ();и выполнять операции внутри него, и выделять память в куче для объекта класса Test?

А как насчет * test "? где он? в куче или стеке? кто-нибудь может мне объяснить? А как насчет * 1009?"*

Test test = new Test();//with () this time

какой конструктор будет вызываться в этом случае?

Ответы [ 4 ]

2 голосов
/ 05 мая 2011

«Конструктор по умолчанию» означает конструктор, который можно вызывать без параметров. Может иметь параметры по умолчанию:

class Test {
public:
    Test(int x = 42); // Still default constructor. 
                      // Can be called as Test() and as Test(int);
};

Оператор new вызовет operator new для выделения памяти и при условии, что выделение выполнено успешно, затем вызовет один или несколько конструкторов. В этом случае он вызовет объект по умолчанию для создания вашего объекта.

Если у вашего объекта есть базовый класс, будет вызвано более одного конструктора.

Сам Test*, test, будет находиться в стеке в этом случае.

1 голос
/ 05 мая 2011

Означает ли пользовательский конструктор по умолчанию «конструктор без параметров»?
Да, конструктор по умолчанию означает конструктор без каких-либо параметров.Конструктор - это специальная и единственная функция-член для класса, имя которого совпадает с именем класса.
Компилятор генерирует конструктор по умолчанию (конструктор без каких-либо параметров), если он необходим вашему коду.

Что делает Test *test = new Test; ?
Распределяет память в куче size = size класса Test и вызывает конструктор по умолчанию Test().

* А как насчет теста "? Где он? В куче или стеке? Кто-нибудь может мне объяснить?
*test этопеременная-указатель типа Test на stack, которая указывает на динамически выделяемый фрагмент памяти размера класса Test на Heap

1 голос
/ 05 мая 2011

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

Оператор Test *test = new Test выделяет память для объекта Test в куче и вызывает конструктор по умолчаниюза это.

0 голосов
/ 05 мая 2011

A default constructor означает конструктор, который можно вызывать без аргументов. Он используется для инициализации параметров любого объекта класса, не обязательно указателей на объекты этого класса. Итак,

Test t;

вызовет конструктор по умолчанию Test::Test(). Обратите внимание, что t является объектом, а не указателем на объект. Некоторые языки также имеют конструкторы по умолчанию, которые автоматически генерируются, когда явные конструкторы не определены, и переопределяются при определении конструкторов.

Оператор new в C ++ выделяет память для указателя из кучи и инициализирует ее с помощью конструктора.

НТН,
Sriram.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...