Создание экземпляра класса с помощью () - PullRequest
6 голосов
/ 21 июля 2011

У меня вопрос: какой конструктор используется при создании экземпляра класса с ClassName instance() в C ++?

Пример:

#include <iostream>

using namespace std;

class Test
{
private:
    Test()
    {
        cout << "AAA" << endl;
    }

public:
    Test(string str)
    {
        cout << "String = " << str << endl;
    }
};

int main()
{
    Test instance_1(); // instance_1 is created... using which constructor ?
    Test instance_2("hello !"); // Ok

    return 0;
}

Спасибо!

Ответы [ 2 ]

12 голосов
/ 21 июля 2011

Tricky! Можно ожидать, что компиляция не удастся, так как конструктор по умолчанию является приватным. Однако он компилируется и ничего не создается. Причина?

Test instance_1();

... это просто объявление функции! (Который возвращает Test и ничего не берет.)

7 голосов
/ 21 июля 2011

Оператор Test instance_1(); вообще не вызывает конструктор, потому что он не определяет переменную - вместо этого он объявляет функцию с именем instance_1, которая возвращает объект типа Test.Чтобы создать экземпляр с помощью конструктора с 0 аргументами, вы должны использовать Test instance_1;.

...