C++ конструторы

erotic

Если
SomeClass obj(...)
есть просто короткая запись
SomeClass obj = SomeClass(...
где под троеточием подразумеваются какие-то параметры конструктора, то почему, когда я прячу в приватную зону класса копирующий конструктор, второй вариант не компилируется с ошибкой cannot access private member declared in class SomeClass ?

shlyumper

Если
SomeClass obj(...)
есть просто короткая запись
SomeClass obj = SomeClass(...)
Источник информации?

erotic

Бьерн Страуструп, Язык программирования С++, Специальное издание. Издательство Бином, 2006-й год, с. 273, первый абзац.
Ну и плюс простенькие эксперименты, например так:
 
#include <iostream>
using namespace std;
class test
{
public:
test(int i)
{
cout<<"test's constructor " << i << endl;
}
test (const test&)
{
cout << "test's copy constructor" << endl;
}
};
int main
{
test t1(5);
test t2 = test(10);
test t3 = t2;
return 0;
}

Выводится:
test's constructor 5
test's constructor 10
test's copy constructor

Dasar

В стандарте написано лишь, что компилятор конструкцию вида SomeClass obj = SomeClass(...) имеет право заменить на конструкцию SomeClass obj(...
но это не означает, что эти конструкции эквивалентны

erotic

Ты хочешь сказать, что SomeClass obj = Someclass(...) может быть реализовано, как создание безымянного объекта, вызов копирующего конструктора для obj и затем удаление безымянного объекта?

Dasar

да

erotic

Все, понял, был неправ
Нашел место, где это подробно описывается.
Оставить комментарий
Имя или ник:
Комментарий: