Почему конструктор копирования скрывает конструктор по умолчанию в C ++? - PullRequest
5 голосов
/ 26 ноября 2010
#include <iostream>
#include <conio.h>

using namespace std;

class Base
{
      int a;
public:
      Base(const Base & b)
      {
                 cout<<"inside constructor"<<endl;
      }   

};

int main()
{
   Base b1;
   getch();
   return 0;
}

Это дает ошибку. нет соответствующей функции для вызова `Base :: Base () ' Почему?

Ответы [ 2 ]

9 голосов
/ 26 ноября 2010

Конструктор по умолчанию генерируется, только если вы не объявляете никаких конструкторов.Предполагается, что если вы определяете свой собственный конструктор, то вы также можете решить, хотите ли вы конструктор без аргументов, и если это так, определите это тоже.

В C ++ 0x будетявный синтаксис для указания, что вы хотите использовать конструктор по умолчанию:

struct Foo {
    Foo() = default;
    ... other constructors ...
};
7 голосов
/ 26 ноября 2010

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

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

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