Re: Бяка в VC++ 6.0
От: Андрей Тарасевич Беларусь  
Дата: 03.05.02 14:43
Оценка: 16 (1)
Здравствуйте 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;'
Best regards,
Андрей Тарасевич
Бяка в VC++ 6.0
От: WeCom Беларусь  
Дата: 03.05.02 11:09
Оценка:
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
Re: Бяка в VC++ 6.0
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 03.05.02 11:15
Оценка:
Здравствуйте 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;
}


Так понятнее?
Алексей Кирдин
Re: Бяка в VC++ 6.0
От: Bell Россия  
Дата: 03.05.02 11:24
Оценка:
Здравствуйте 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

Ну а чего же ты хотел — сгенерированный компилятором конструктор копии ничего не выводит
Любите книгу — источник знаний (с) М.Горький
Re[2]: Бяка в VC++ 6.0
От: WeCom Беларусь  
Дата: 03.05.02 11:35
Оценка:
Здравствуйте Kaa, Вы писали:

Kaa>Это ты облажался. :-))

Это я просто супер протормозил :)) :crash:
Re[2]: Бяка в VC++ 6.0
От: WeCom Беларусь  
Дата: 04.05.02 12:36
Оценка:
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++. Протормозил с конструктором копии...
Re: Бяка в VC++ 6.0
От: asutpman Россия www.epflorov.hotbox.ru
Дата: 05.05.02 03:43
Оценка:
Почему это вообще скомпилировалось.
Ведь MyClass::MyClass() не определяет формальных параметров? Или я чего-то не понимаю.?
Евгений Флоров
Re[2]: Бяка в VC++ 6.0
От: Dima2  
Дата: 05.05.02 06:08
Оценка:
Здравствуйте asutpman, Вы писали:

A>Почему это вообще скомпилировалось.

A>Ведь MyClass::MyClass() не определяет формальных параметров? Или я чего-то не понимаю.?
A>

Ты это к чему ?
А чему ты удивляешся, конструктору без параметров ?
Re[2]: Бяка в VC++ 6.0
От: vladsm Россия  
Дата: 05.05.02 06:21
Оценка:
Здравствуйте asutpman, Вы писали:

A>Почему это вообще скомпилировалось.

A>Ведь MyClass::MyClass() не определяет формальных параметров? Или я чего-то не понимаю.?
A>

Ну это же ключевая мысль топика. Просто копирующий коструктор
MyClass( const MyClass& );


определяется самим компилятором. Вот он и вызывается.

P.S. Повнимательней почитай все ответы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.