Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2011, 08:37   #21
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
Если у тебя есть функция void myFunc(MyClass &x), .......... . Это называется передачей по значению
Видно ты точно что-то вчера употребил
profi вне форума Ответить с цитированием
Старый 28.02.2011, 09:26   #22
Janym
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 22
По умолчанию

С КК то ясен пень =)
Скажите лучше, почему в g++ прога корректней сработала?
Janym вне форума Ответить с цитированием
Старый 28.02.2011, 09:31   #23
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Это как "корректней"? Может потому что g++ "корректный"
profi вне форума Ответить с цитированием
Старый 28.02.2011, 09:37   #24
Janym
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 22
По умолчанию

Посмотри мой результат, и тот который привёл alex_x_x

Последний раз редактировалось Janym; 28.02.2011 в 09:43.
Janym вне форума Ответить с цитированием
Старый 28.02.2011, 09:39   #25
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Janym действительно . Ну тогда Code::Blocks + MinGW используй, и компилятор Майкрософт на помойку.
profi вне форума Ответить с цитированием
Старый 28.02.2011, 09:51   #26
Janym
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 22
По умолчанию

Цитата:
Janym действительно . Ну тогда Code::Blocks + MinGW используй, и компилятор Майкрософт на помойку.
Да пока не могу, он ещё нужен )
Janym вне форума Ответить с цитированием
Старый 28.02.2011, 12:08   #27
Janym
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 22
По умолчанию

Может кто-нибудь расскажет почему неявный КК так устроен Студии? )
Janym вне форума Ответить с цитированием
Старый 28.02.2011, 12:40   #28
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
Сообщение от profi Посмотреть сообщение
Цитата:
Если у тебя есть функция void myFunc(MyClass &x), .......... . Это называется передачей по значению
Видно ты точно что-то вчера употребил
Употреблял, не скрою . В 2 местах получилась передача по значению . Исправил.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 28.02.2011, 12:45   #29
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
Сообщение от Janym Посмотреть сообщение
Может кто-нибудь расскажет почему неявный КК так устроен Студии? )
У меня есть подозрение. mingw неявный КК делает таким: MyClass(const MyClass &other). Студия делает КК таким: MyClass(MyClass other). Это объясняет, почему при func(other) вызывается 2 деструктора, а не один. Хотя по-моему это как-то рекурсивненько получается .

upd: ан нет, не бывает копирующих конструкторов MyClass(MyClass other), должна быть передача по ссылке. Иначе реально ведь рекурсия получится.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 28.02.2011 в 12:58.
Obey-Kun вне форума Ответить с цитированием
Старый 28.02.2011, 13:08   #30
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Код:
#include <iostream>
using namespace std;

class Class1 {
public:
    Class1() { cout << "Constructor of Class1 " << this << endl; }

    ~Class1() { cout << "Destructor of Class1 " << this << endl; }
};

class Class2 {
public:
    Class2() { cout << "Constructor of Class2 " << this << endl; }
    Class2(Class2 &other) { cout << "Copy constructor of Class2 " << this << endl; }
    ~Class2() { cout << "Destructor of Class2 " << this << endl; }
};

class Class3 {
public:
    Class3() { cout << "Constructor of Class3 " << this << endl; }
    Class3(const Class3 &other) { cout << "Copy constructor of Class3 " << this << endl; }
    ~Class3() { cout << "Destructor of Class3 " << this << endl; }
};

template <class T>
void testClass(T c) { cout << "--- Hello, I got copy of object at " << &c << " ---" << endl; }

template <class T>
void test() {
    cout << "********************************" << endl
         << "*** Gonna test another class ***" << endl;
    T c;
    cout << "*** I just created object at " << &c << " and now copy will be created ***" << endl;
    testClass(c);
    cout << "** Bye-bye ***" << endl;
}

int main()
{
    test<Class1>();
    test<Class2>();
    test<Class3>();
}
Код:
********************************
*** Gonna test another class ***
Constructor of Class1 0x7fff9af6c0fe
*** I just created object at 0x7fff9af6c0fe and now copy will be created ***
--- Hello, I got copy of object at 0x7fff9af6c0ff ---
Destructor of Class1 0x7fff9af6c0ff
** Bye-bye ***
Destructor of Class1 0x7fff9af6c0fe
********************************
*** Gonna test another class ***
Constructor of Class2 0x7fff9af6c0fe
*** I just created object at 0x7fff9af6c0fe and now copy will be created ***
Copy constructor of Class2 0x7fff9af6c0ff
--- Hello, I got copy of object at 0x7fff9af6c0ff ---
Destructor of Class2 0x7fff9af6c0ff
** Bye-bye ***
Destructor of Class2 0x7fff9af6c0fe
********************************
*** Gonna test another class ***
Constructor of Class3 0x7fff9af6c0fe
*** I just created object at 0x7fff9af6c0fe and now copy will be created ***
Copy constructor of Class3 0x7fff9af6c0ff
--- Hello, I got copy of object at 0x7fff9af6c0ff ---
Destructor of Class3 0x7fff9af6c0ff
** Bye-bye ***
Destructor of Class3 0x7fff9af6c0fe
Всё ожидаемо. А что покажет после компиляции в VC++?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение свойств объекта не активируя его ndvikulov Microsoft Office Excel 16 16.09.2010 20:14
Передача метода объекта. the_deer_one Общие вопросы C/C++ 8 09.09.2010 15:07
Можно ли в макрос передать имя объекта, его вызывающего buagbu Microsoft Office Excel 3 16.04.2010 08:54
Передача объекта в функцию Юра_YUYU Общие вопросы C/C++ 14 18.01.2010 16:00
Проверка объекта после его уничтожения AHTuKiLLeR Общие вопросы Delphi 1 19.06.2009 10:43