Здравствуйте WeCom, Вы писали:
WC>WC>class MyClass
WC>{
WC>public:
WC> MyClass(){ cout << "ctor"<<endl; }
WC> ~MyClass(){ cout << "dtor"<<endl; }
WC>};
WC>int main(int argc, char* argv[])
WC>{
WC> MyClass c = MyClass( MyClass( MyClass() ) );
WC> return 0;
WC>}
WC>
WC>Выводит:
WC>ctor
WC>dtor
WC>dtor
Во-первых, про конструктор копирования не забывай, как тут уже заметили.
Во-вторых, имей в виду, что компилятор имеет право не создавать промежуточные временные объекты и сократить твое выражение до просто 'MyClass c;'
class MyClass
{
public:
MyClass(){ cout << "ctor"<<endl; }
~MyClass(){ cout << "dtor"<<endl; }
};
int main(int argc, char* argv[])
{
MyClass c = MyClass( MyClass( MyClass() ) );
return 0;
}
Выводит:
ctor
dtor
dtor
Здравствуйте WeCom, Вы писали:
Это не бяка. Это ты облажался.
#include <stdio.h>
#include <iostream.h>
class MyClass
{
public:
MyClass(){ cout << "ctor"<<endl; }
MyClass( const MyClass& r ) { cout << "cctor"<<endl; }
~MyClass(){ cout << "dtor"<<endl; }
};
int main(int argc, char* argv[])
{
MyClass c = MyClass( MyClass( MyClass() ) );
return 0;
}
Так понятнее?
Здравствуйте WeCom, Вы писали:
WC>WC>class MyClass
WC>{
WC>public:
WC> MyClass(){ cout << "ctor"<<endl; }
WC> ~MyClass(){ cout << "dtor"<<endl; }
WC>};
WC>int main(int argc, char* argv[])
WC>{
WC> MyClass c = MyClass( MyClass( MyClass() ) );
WC> return 0;
WC>}
WC>
WC>Выводит:
WC>ctor
WC>dtor
WC>dtor
Ну а чего же ты хотел — сгенерированный компилятором конструктор копии ничего не выводит
template<class T>
void SomeFunc1(T t=T() );
Замечательно работает как для встроенных типов так и для классов.
template<class T>
void SomeFunc2()
{
T* t = new T();
}
Работает для классов — для встроенных типов в VC++ не инициализирует.
template<class T>
void SomeFunc2()
{
T* t = new T( T() );
}
Работает как для встроенных типов так и для классов. Но если компилятор недостаточно догадлив, возможно конструирование лишнего временного обьекта. Взялся проверить в VC++. Протормозил с конструктором копии...
Почему это вообще скомпилировалось.
Ведь MyClass::MyClass() не определяет формальных параметров? Или я чего-то не понимаю.?
Здравствуйте asutpman, Вы писали:
A>Почему это вообще скомпилировалось.
A>Ведь MyClass::MyClass() не определяет формальных параметров? Или я чего-то не понимаю.?
A>
Ты это к чему ?
А чему ты удивляешся, конструктору без параметров ?
Здравствуйте asutpman, Вы писали:
A>Почему это вообще скомпилировалось.
A>Ведь MyClass::MyClass() не определяет формальных параметров? Или я чего-то не понимаю.?
A>
Ну это же ключевая мысль топика.

Просто копирующий коструктор
MyClass( const MyClass& );
определяется самим компилятором. Вот он и вызывается.
P.S. Повнимательней почитай все ответы