Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перегрузка операций 
V
    Опции темы
LPBOY
Дата 28.1.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Цитата(Void @ 28.1.2006, 11:40 Найти цитируемый пост)

Такое объяснение не соответсвует принятой в C++ терминологии, и вводит в заблуждение.
Локальные объекты имеют automatic storage duration, а static storage duration — это совсем другое.

ИМХО немного не так. Локальные объекты это те, которые объявлены в local scope.
Соответственно они могут иметь как automatic storage duration, так и static storage duration.
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
Void
Дата 28.1.2006, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



LPBOY
+1 Сгоряча не оговорил все возможные варианты smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
serendip
Дата 28.1.2006, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Ужас какой...smile Пойду читать!smile Спасибо вам большое, честно говоря о конструкторе копирования я услышала от вас впервые..
И действительно, пр-мма вышла за область выделенной памяти и начала уже буквы выводить smile

Забавно..В 1-ом сообщении от BreakPointMAN написано самое главноеsmile
Ну с трудом как-то верилось..smile
Просто я не видела между динамически выделенной памятью и конструктором копирования никакой связи.
Прошу прощенья..smile

Это сообщение отредактировал(а) serendip - 28.1.2006, 20:39
PM MAIL ICQ   Вверх
blackofe
Дата 2.2.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 29.11.2005

Репутация: 4
Всего: 4



Цитата(Fin @ 28.1.2006, 13:17)
Теперь чуть усложним программу.
Код

#include <iostream.h>
class A {
public:
    A(void) {cout << "Constructor " << this << endl;};
    ~A(void) {cout << "Destructor " << this << endl;};
};

A foo(void)
{
    A obj;
    return obj;
}

int main()
{
    A s=foo();
    return 0;
}

Выдаваемый результат:
Цитата

Constructor 0x0012FF10
Destructor 0x0012FF10
Destructor 0x0012FF7C
Press any key to continue

Прошу заметить уважаемую публику, что конструктор для экземпляра с адресом 0x0012FF7C не был вызван. Компилятор пропустил на ура, без проблем.

доусложним усложненную программу smile:

Код

class A {
public:
    A(void) {cout << "Constructor " << this << endl;};
    A(const A &a)                                {    cout << "copy A()" << this << endl; }
    ~A(void) {cout << "Destructor " << this << endl;};
};

A foo(void)
{
    A obj;
    return obj;
}

int main()
{
    A s=foo();
    return 0;
}


результат:

Код

Constructor 0012FDDB
copy A()0012FED7
Destructor 0012FDDB
Destructor 0012FED7


- была вызвана функция foo, внутри которой был создан объект типа A (первая выведенная запись).

- данный объект был возвращен из функции foo оператором return. при этом используется конструктор копирования, который мы сейчас доопределили явно (у тебя он не был определен, и за тебя его создал компилер) - вторая строчка вывода. обрати внимание - был создан новый объект - совершенно самостоятельный.

- далее - выход из области видимости для первого объекта. для него вызывается деструктор (третья строчка вывода).

- переменная s - и есть наш новый объект, который был создан путем копирования другого объекта, созданного внутри функции foo. при выходе из области видимости (функции main) для этого объекта вызывается деструктор. опять же можно обратить внимание, что деструктор вызывается для объекта, созданного конструктором копии.

так что все правильно. и никакого криминала в возвращении объекта функцией нет.

Это сообщение отредактировал(а) blackofe - 2.2.2006, 21:11
PM MAIL   Вверх
Fin
Дата 3.2.2006, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 3
Всего: 10



blackofe Я с этим разобрался. В тот же день я проделал примерно тот же самый код, что и ты привел. Что мы имеем. Двойное создание и копирование класса. При наследовании класса, все время нужно поддерживать конструктор копирования.
И это все благодоря элементарной человеческой лени при написании кода. Я ленив, но не до такой степени.


--------------------
Пролетал мимо.
PM MAIL   Вверх
Void
Дата 3.2.2006, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Fin
Знаешь, это возражения примерно из той же оперы, что и «никогда не пользуйтесь указателями, а то в вашем проекте заведутся маленькие злобные существа — меморилики».
Возвращать класс по значению или на куче — исключительно вопрос семантики данного класса.
Цитата(Fin @ 3.2.2006, 03:39 Найти цитируемый пост)
И это все благодоря элементарной человеческой лени при написании кода.

Элементарная человеческая лень привела к появлению Java и C#, где о таких вещах думать не надо. И это хорошо.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0830 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.