Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 28.02.2011, 09:37   #21
profi
ПрофессионалФорумчанин
 
Регистрация: 19.11.2007
Сообщений: 1,022
Репутация: 144
По умолчанию

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

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

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

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

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

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

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

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

icq: 323216
По умолчанию

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

icq: 323216
По умолчанию

Цитата:
Сообщение от 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 в 13:58.
Obey-Kun вне форума   Ответить с цитированием
Старый 28.02.2011, 14:08   #30
Obey-Kun
Линуксоид
Профессионал
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Адрес: Москва
Сообщений: 1,403
Репутация: 165

icq: 323216
По умолчанию

Код:
#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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение свойств объекта не активируя его 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 17:00
Проверка объекта после его уничтожения AHTuKiLLeR Общие вопросы Delphi 1 19.06.2009 10:43


00:00.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.