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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создан ли объект во время выполнения тела констр-а, где об этом в стандарте написано? 
V
    Опции темы
zim22
Дата 9.4.2009, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Lazin  написал в одной теме, что
Цитата

во время выполнения тела конструктора объект уже создан и все переменные объекта инициализированы

но получил за этот пост минус от UnrealMan с комментарием: 
Цитата

Во время выполнения тела конструктора объект ещё не создан.


Но я тут книжечку почитывал и теперь у меня сомнения, прав ли был UnrealMan... Разъясните пожалуйста.

Там такой пример был:
Код

class ZooAnimal { };
class Endangered { };
class Bear : public ZooAnimal { };
class Panda : public Bear, public Endangered { };


For Panda, the order of base-class initialization is:
  • ZooAnimal, the ultimate base class up the hierarchy from Panda's immediate base class Bear
  • Bear, the first immediate base class
  • Endangered, the second immediate base, which itself has no base class
  • Panda; the members of Panda itself are initialized, and then the body of its constructor is run.


Плюс в стандарте (пункт 12.6.5) сказано, что сначала инициализируются все переменные объекта, а только потом выполняется тело конструктора

Цитата

Initialization shall proceed in the following order:

— First, and only for the constructor of the most derived class as described below, virtual base classes shall be
  initialized in the order they appear on a depth-first left-to-right traversal of the directed acyclic graph of base
  classes, where “left-to-right” is the order of appearance of the base class names in the derived class base-specifier-list.

— Then, direct base classes shall be initialized in declaration order as they appear in the base-specifier-list (regardless
  of the order of the mem-initializers).

— Then, non-static data members shall be initialized in the order they were declared in the class definition (again
  regardless of the order of the mem-initializers).

— Finally, the body of the constructor is executed.



--------------------
PM MAIL   Вверх
Fazil6
Дата 9.4.2009, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

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



Цитата(zim22 @  9.4.2009,  09:33 Найти цитируемый пост)
о я тут книжечку почитывал и теперь у меня сомнения, прав ли был UnrealMan... Разъясните пожалуйста.

технически прав. Создание объекта - есть выделение памяти + инициализация. Инициализация - это и есть вызов конструктора. Хотя конечно когда выполняется конструктор, уже все объекты этого объекта созданы и, если предусмотрено, проинициализированы какими-то своими конструкторами. Вобщем считается, что создание объекта заканчено после вызова конструктора

Добавлено через 4 минуты и 40 секунд
тут по большему счету вопрос терминологии. Называть объект созданным во время вызова конструктора или НЕсозданным, я например, особого значения не придаю. Главное понимать что происходит.  
PM MAIL   Вверх
Lazin
Дата 9.4.2009, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



ну вообще, я там имел ввиду, что во время выполнения тела конструктора, все члены класса уже созданы и к ним можно обращаться, ведь речь шла о использовании членов класса в конструкторе, а не о том, когда объект считается созданым smile 
PM MAIL Skype GTalk   Вверх
Anikmar
Дата 9.4.2009, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(Lazin @  9.4.2009,  09:48 Найти цитируемый пост)
ну вообще, я там имел ввиду, что во время выполнения тела конструктора, все члены класса уже созданы и к ним можно обращаться, ведь речь шла о использовании членов класса в конструкторе, а не о том, когда объект считается созданым   


C точки зрения первого взгляда на тему, я сразу подумал именно о том, что имел в виду Lazin. Считать объект созданым можно, по-разному конечно, но в теле конструктора можно быть уверенным, что под объект выделена память.
Например, если конструктор выглядит так:
Код

class MyClass
{
  int AField;
  int BField;
public: 
  MyClass();
};

MyClass::MyClass() : AField(5),BField(7)
{
// Тело конструктора и все поля проинициализированы
// Считать здесь объект созданным или нет?
}


Так что весьма спорный момент и минус ставить считаю неправильным.
PM MAIL ICQ   Вверх
zim22
Дата 9.4.2009, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Lazin @  9.4.2009,  09:48 Найти цитируемый пост)
 речь шла о использовании членов класса в конструкторе, а не о том, когда объект считается созданым  

Понял. Тогда всё правильно smile Инициализация членов не есть создание объекта %)



--------------------
PM MAIL   Вверх
Dem_max
Дата 9.4.2009, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



Да сначала инициализируются все переменные  потом выполняется тело конструктора, так как в конструкторе можно уже обращаться к переменным класса.

zim22
что ты считаешь объектом ? 

Это сообщение отредактировал(а) Dem_max - 9.4.2009, 10:00


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
zim22
Дата 9.4.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Anikmar @  9.4.2009,  09:58 Найти цитируемый пост)
Так что весьма спорный момент и минус ставить считаю неправильным.

Да-восторжествует справедливость! Lazin, +1

Добавлено через 1 минуту и 8 секунд
Цитата(Dem_max @  9.4.2009,  09:59 Найти цитируемый пост)
что ты считаешь объектом ? 

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


--------------------
PM MAIL   Вверх
Fazil6
Дата 9.4.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

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



Цитата(zim22 @  9.4.2009,  09:59 Найти цитируемый пост)
Понял. Тогда всё правильно smile Инициализация членов не есть создание объекта %)

не надо бросаться в крайности. Инициализация - это не только список инициализации. Объект может иметь, например некий буфер, память под который выделяется внутри конструктора. И с логической точки зрения пока этот буфер не выделен, объект еще использовать нельзя и какие-то интерфейсные функции, например, еще нельзя вызывать. 
 
Кстати, насколько я помню, создание = память + инициализация - это есть в стандарте
PM MAIL   Вверх
Dem_max
Дата 9.4.2009, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



Код

MyClass::MyClass() : AField(5),BField(7)
{
// Тело конструктора и все поля проинициализированы
// Считать здесь объект созданным или нет?

}

Я думаю перед закрывающейся скобкой да, можно считать созданным.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
zim22
Дата 9.4.2009, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Fazil6 @  9.4.2009,  10:13 Найти цитируемый пост)
Объект может иметь, например некий буфер, память под который выделяется внутри конструктора. И с логической точки зрения пока этот буфер не выделен, объект еще использовать нельзя

Спорный какой-то вопрос. А если объект не имеет буфера и не выделяет дополнительно никакую память? То он является созданным? или нет?


--------------------
PM MAIL   Вверх
mes
Дата 9.4.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(zim22 @  9.4.2009,  09:17 Найти цитируемый пост)
Цитата

Объект может иметь, например некий буфер, память под который выделяется внутри конструктора. И с логической точки зрения пока этот буфер не выделен, объект еще использовать нельзя

Спорный какой-то вопрос.

имхо, для объекта с виртуальными функциями проще - раз в конструкторе "виртуальность не установлена", значит полностью он не создан.
на простые объекты распространяется аналогия.
smile


--------------------
PM MAIL WWW   Вверх
Lazin
Дата 9.4.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(zim22 @  9.4.2009,  10:17 Найти цитируемый пост)
Спорный какой-то вопрос. А если объект не имеет буфера и не выделяет дополнительно никакую память? То он является созданным? или нет?

а как ты собираешься обращаться к не полностью созданному объекту, иначе чем в теле конструктора? 
PM MAIL Skype GTalk   Вверх
zim22
Дата 9.4.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Lazin @  9.4.2009,  10:29 Найти цитируемый пост)
а как ты собираешься обращаться к не полностью созданному объекту, иначе чем в теле конструктора? 

так:
Код
int func(int x) { return 10; }

class Foo {
public:  
  Foo(int val) : x(func(val)) {  }
private:
  int x;
};

int _tmain(int argc, _TCHAR* argv[])
{
  Foo f1(5);
    return 0;
}



**************
более нагляден этот пример:
Код

typedef void (*fcn)();

int func(fcn par1) { 
  par1(); 
  return 10; 
}

class Foo {
public:  
  Foo() : x(func(print)) { }  
  void print() { std::cout << x; }  
private:
  int x;
};



только не компилится smile
error C3867: 'Foo::print': function call missing argument list; use '&Foo::print' to create a pointer to member

Это сообщение отредактировал(а) zim22 - 9.4.2009, 10:50


--------------------
PM MAIL   Вверх
Anikmar
Дата 9.4.2009, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(Fazil6 @  9.4.2009,  10:13 Найти цитируемый пост)
Кстати, насколько я помню, создание = память + инициализация - это есть в стандарте 

Стандартизировать это сложно.

Что есть инициализация? Для простых переменных - присваивание начального значения, можно вне тела конструктора.
Для буферов - можно в конструкторе, у меня всегда отдельным методом Init

Для полей-членов других классов там может быть вообще черт знает что...

Лично для меня объект создан тогда - когда им можно пользоваться, привязывать это к конструктору - узковато вроде как получается.
PM MAIL ICQ   Вверх
mes
Дата 9.4.2009, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(zim22 @  9.4.2009,  09:35 Найти цитируемый пост)
только не компилится smile
error C3867: 'Foo::print': function call missing argument list; use '&Foo::print' to create a pointer to member

Код

class Foo;
typedef void (Foo::*fcn)();

int func(Foo& foo, fcn par1) {
  (foo.*par1)();
  return 10;
}
class Foo {
public:
  Foo() : x(func(*this, &Foo::print)) { }
  void print() { std::cout << x; }

private:
  int x;
};



--------------------
PM MAIL WWW   Вверх
zim22
Дата 9.4.2009, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



mes, спасибо!
Цитата(Lazin @  9.4.2009,  10:29 Найти цитируемый пост)
а как ты собираешься обращаться к не полностью созданному объекту, иначе чем в теле конструктора? 

так как mes написал. В списке инициализации.

Вот чуть поинтересней код: 
Если в функции print() обращаться к string, а не к int, то программа упадёт. 
Код

#include <iostream>
#include <string>

class Foo;
typedef void (Foo::*fcn)();

int func(Foo& foo, fcn par1) {
  (foo.*par1)();
  return 10;
}
class Foo {
public:
  Foo() : x(func(*this, &Foo::print)) { 
    std::cout << "S: " << s << std::endl; 
  }
  void print() { std::cout << s; }

private:
  int x;
  std::string s;
};

int main()
{
  Foo f1;
  return 0;
}





--------------------
PM MAIL   Вверх
Fazil6
Дата 9.4.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

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



Цитата(Anikmar @  9.4.2009,  10:41 Найти цитируемый пост)
Что есть инициализация? Для простых переменных - присваивание начального значения, можно вне тела конструктора.
Для буферов - можно в конструкторе, у меня всегда отдельным методом Init

читаем ветку сначала. Инициализация - это вызов конструктора. Речь не о инициализации конкретных членов класса , а о инициализации объекта класса, как чего-то цельного и неделимого. Это включает уже в себя инициализацию отдельных членов. Иначе как в конструкторе как это делать? 
Цитата(Anikmar @  9.4.2009,  10:41 Найти цитируемый пост)
Стандартизировать это сложно.

что тут сложного?

Цитата

пункт такойто.
Создание объекта.

Создание объекта - это выделение памяти и инициализация

вот я и простандартизировал.


Цитата(Anikmar @  9.4.2009,  10:41 Найти цитируемый пост)
Лично для меня объект создан тогда - когда им можно пользоваться, привязывать это к конструктору - узковато вроде как получается. 

согласен. Вот для меня совершенно логично, что пользоваться объектом можно после вызова конструктора. 
Ведь пока автомобиль не сошел с конвейера им пользуются исключительно так же как и конструктор "пользуется" объектом во время его "создания". Когда сошел с конвейера (читай вышлри из конструктора) можно пользоваться! Ура!!!

... смотря конечно какой автомобиль... 

PM MAIL   Вверх
mes
Дата 9.4.2009, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Fazil6 @  9.4.2009,  10:23 Найти цитируемый пост)

... смотря конечно какой автомобиль... 

имхо,  в противном случае (если автомобилем нельзя пользоваться после того, как он сошел с контейнера) вина конструктора, а не автомобиля smile

Добавлено @ 11:33
Цитата(zim22 @  9.4.2009,  10:21 Найти цитируемый пост)
Если в функции print() обращаться к string, а не к int, то программа упадёт. 

естественно, s еще не создана smile
чтоб решить эту проблему , нужно поменять х и s местами.. (хотя подобные трюки лучше не использовать)  smile 


Это сообщение отредактировал(а) mes - 9.4.2009, 11:35


--------------------
PM MAIL WWW   Вверх
Fazil6
Дата 9.4.2009, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

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



Цитата(zim22 @  9.4.2009,  10:17 Найти цитируемый пост)
Спорный какой-то вопрос. А если объект не имеет буфера и не выделяет дополнительно никакую память? То он является созданным? или нет? 

с технической точки зрения - он создан. Ведь указатель (который и является членом класса) уже создан. И он куда-то даже указывает (то на что он указывает ведь членом класса не является). И им можно пользоваться (например присвоить ему значение). Но то на что он должен по логике вещей указывать еще нет. 
Вот и считается, что объект создан, когда вызвался конструктор. Ты ведь как пользователь не обязан знать как настраивается объект. Значит если вызвался конструктор, то все необходимые приготовления к использованию сделаны (сделаны они на самом деле или нет, надо их было делать или нет - пользователь за это не отвечает. И не должен отвечать) и ты как пользователь сделал все что обязан был (сказал что-то типа "эй ты, созайся вот таким способом"). 
PM MAIL   Вверх
zim22
Дата 9.4.2009, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Fazil6 @  9.4.2009,  11:34 Найти цитируемый пост)
"эй ты, созайся вот таким способом"

smile понял, спасибо


--------------------
PM MAIL   Вверх
Anikmar
Дата 9.4.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(Fazil6 @  9.4.2009,  11:23 Найти цитируемый пост)
согласен. Вот для меня совершенно логично, что пользоваться объектом можно после вызова конструктора. 
Ведь пока автомобиль не сошел с конвейера им пользуются исключительно так же как и конструктор "пользуется" объектом во время его "создания". Когда сошел с конвейера (читай вышлри из конструктора) можно пользоваться! Ура!!!

... смотря конечно какой автомобиль... 


Вот я именно про это и говорил. С одной стороны можно пользоваться объектами вообще без конструктора (простой класс, в котором все члены имеют собственные конструкторы). Так что - если нет конструктора - объект не создан?

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

А касаемо собственно обсуждения - говорить, что в теле конструктора объект не создан (собственно с чего начиналась тема) как-то неправильно - все зависит от объекта.
PM MAIL ICQ   Вверх
zim22
Дата 9.4.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Anikmar @  9.4.2009,  13:21 Найти цитируемый пост)
С одной стороны можно пользоваться объектами вообще без конструктора

компилятор всё-равно создаст синтезируемый конструктор, если вы его явно не создаёте.


--------------------
PM MAIL   Вверх
Anikmar
Дата 9.4.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(zim22 @  9.4.2009,  16:13 Найти цитируемый пост)
компилятор всё-равно создаст синтезируемый конструктор, если вы его явно не создаёте. 

Бесспорно.

Я согласен полностью с этим:
Цитата(Fazil6 @  9.4.2009,  09:41 Найти цитируемый пост)
тут по большему счету вопрос терминологии. Называть объект созданным во время вызова конструктора или НЕсозданным, я например, особого значения не придаю. Главное понимать что происходит.  


А по поводу плюсов и минусов - человеку, получившему возможность показать свою значимость хочется потешить собственное самолюбие. Это я про UnrealMan. Ставить - Lazin-у - это просто смешно.

Ставить минус мне, не участвуя в теме - это просто некорректно. Ну мне это, если честно, по барабану  smile.
PM MAIL ICQ   Вверх
zim22
Дата 9.4.2009, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Anikmar, что интересней всего, UnrealMan даже не пытается понять точку зрения собеседника. Тупо ставит минусы smile
Цитата

компилятор всё-равно создаст синтезируемый конструктор, если вы его явно не создаёте. 

кстати, а вы знали, что компилятор также создаст синтезируемый деструктор, даже в том случае, если вы его всё-равно явно создадите. Т.е. в классе существует как минимум 1, а если вы определили свой - то два деструктора smile


--------------------
PM MAIL   Вверх
Anikmar
Дата 9.4.2009, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(zim22 @  9.4.2009,  16:34 Найти цитируемый пост)
кстати, а вы знали, что компилятор также создаст синтезируемый деструктор, даже в том случае, если вы его всё-равно явно создадите. Т.е. в классе существует как минимум 1, а если вы определили свой - то два деструктора  

Нет, если честно. А что тогда делает синтетик? Просто вызывает что-то вроде free?
PM MAIL ICQ   Вверх
zim22
Дата 9.4.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Anikmar @  9.4.2009,  16:54 Найти цитируемый пост)
 А что тогда делает синтетик? Просто вызывает что-то вроде free?

Из книжки:

Важное различие между деструктором и конструктором копий(или оператором присвоения) заключается в том, Что даже при наличии собственного
деструктора, синтезируемый деструктор все равно выполняется. Например, для класса Sales_item можно создать следующий пустой деструктор:

Код

class Sales_item {
public:
  Sales_item(std::string s) : isbn(s) { }
  ~Sales_item() { }
private:
  std::string isbn;
  double revenue;
  int units_sold;
};


При удалении объектов класса Sales_item этот деструктор (определённый нами) ничего не делает. После того, как он завершает работу, выполняется
синтезируемый деструктор, который и удаляет все переменный-члены класса. Синтезируемый деструктор удаляет переменную-член типа string,
вызывая деструктор класса string, который освобождает область памяти, используемой для хранения переменной isbn. Переменные-члены units_sold и
revenue имеют встроенный тип, поэтому для их удаления синтезируемый деструктор ничего не делает.

Это сообщение отредактировал(а) zim22 - 9.4.2009, 17:19


--------------------
PM MAIL   Вверх
vinter
Дата 9.4.2009, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



Цитата(Anikmar @  9.4.2009,  17:22 Найти цитируемый пост)
А по поводу плюсов и минусов - человеку, получившему возможность показать свою значимость хочется потешить собственное самолюбие. Это я про UnrealMan. Ставить - Lazin-у - это просто смешно.

Lazin, не прав в своей фразе, оговорка достаточно серьезная, точнее во второй ее части. А ставить за это минус, или нет это дело каждого. Для этого репутация и существует.


--------------------
Мой блог
PM MAIL WWW   Вверх
and277
Дата 9.4.2009, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Интересно а если я в main в первую очередь допустим объявлю указатель на объект. Конструктор  при создании этого указателя запустится? Если да- то что он проинициализирует?

Или просто указателю инициализируется каким то адресом и все... До присвоения объекта этому указателю....
Извеняюсь заранее за сумбурность.

Это сообщение отредактировал(а) and277 - 9.4.2009, 18:31
PM MAIL   Вверх
Anikmar
Дата 9.4.2009, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(and277 @  9.4.2009,  18:25 Найти цитируемый пост)
Интересно а если я в main в первую очередь допустим объявлю указатель на объект. Конструктор  при создании этого указателя запустится? Если да- то что он проинициализирует?

Или просто указателю инициализируется каким то адресом и все... До присвоения объекта этому указателю....
Извеняюсь заранее за сумбурность.


Если просто объявите - никаких конструкторв не вызовется, пока не создадите объект оператором new

 smile 
Цитата(vinter @  9.4.2009,  18:00 Найти цитируемый пост)
Lazin, не прав в своей фразе, оговорка достаточно серьезная, точнее во второй ее части. А ставить за это минус, или нет это дело каждого. Для этого репутация и существует. 


Нормально, если человек оспорит фразу, чтобы все видели спор и получали дополнительные знания. Вы не меньше меня на форуме и знаете, что репутация в минус ставится за досаточно серьезные нарушения - грубость, введение в заблуждение и т.п. При этом нормальные люди не тихарят, а пишут об этом в посте.

Конечно очки, баллы - это все похоже на детскую игру, но если уж в нее играем - почему не придерживаться неписанных правил? Lazin и без всякой репутации имеет авторитет - достаточно проследить несколько тем с его участием. А вот тихарщик, который только и делает, что ставит минусы лично для меня авторитета не представляет, пусть он в тысячу раз лучше меня программирует. ИМХО, естественно.

Хотя некоторую долю развлекухи он своими минусами сегодня внес  smile .



PM MAIL ICQ   Вверх
Rififi
Дата 9.4.2009, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



минусы, плюсы... детский сад, штаны на лямках smile:
PM MAIL   Вверх
Lazin
Дата 9.4.2009, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(Rififi @  9.4.2009,  22:07 Найти цитируемый пост)
минусы, плюсы... детский сад, штаны на лямках

да не говори smile 

Цитата(Anikmar @  9.4.2009,  16:22 Найти цитируемый пост)
Это я про UnrealMan.

UnrealMan(как впрочем и Fazil6), не раз оказывал мне услугу, подлавливая на глупостях, которые я писал в разделе по срр, жаль что он сюда редко заходит smile 
PM MAIL Skype GTalk   Вверх
Rififi
Дата 9.4.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



и кстати уж лучше получить минус от Унреала (хоть что-то полезное узнаешь), чем все эти плюсы от нубиков, которые еще сами не веря своему счастью - продержались еще семестр, с полными штанами радости остервенело давят кнопку [+]((((:
PM MAIL   Вверх
J0ker
Дата 9.4.2009, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



все, что выше не читал  smile 
в конструкторе объект еще не создан - и док-во этому факту то, что при эксцепшене в конструкторе автоматически вызывается соответствующий delete без вызова деструктора


--------------------
user posted image
PM MAIL   Вверх
azesmcar
Дата 9.4.2009, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Rififi

Да какая разница, плюс, минус smile что это меняет? Меня немного другое смущает..минус это в какой-то степени критика, но критика молчаливой быть по моему не должна smile
а так..что минус, что плюс..что синус с косинусом smile

Добавлено через 3 минуты и 28 секунд
Цитата

при эксцепшене в конструкторе автоматически вызывается соответствующий delete без вызова деструктора 

какой еще delete???

Это сообщение отредактировал(а) azesmcar - 9.4.2009, 23:37
PM   Вверх
UnrealMan
Дата 9.4.2009, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Lazin @  9.4.2009,  09:48 Найти цитируемый пост)
ну вообще, я там имел ввиду, что во время выполнения тела конструктора, все члены класса уже созданы и к ним можно обращаться

То, что ты имел в виду, было известно лишь тебе и некоторым телепатам. Написал-то ты совсем другое.

Цитата(Anikmar @  9.4.2009,  13:21 Найти цитируемый пост)
А касаемо собственно обсуждения - говорить, что в теле конструктора объект не создан (собственно с чего начиналась тема) как-то неправильно - все зависит от объекта. 

Объект становится созданным в момент начала его lifetime. В случае наличия нетривиального конструктора объект начинает существовать только после полного отрабатывания его конструктора:

Цитата(3.8 Object Lifetime)
The lifetime of an object is a runtime property of the object. The lifetime of an object of type T begins when:
— storage with the proper alignment and size for type T is obtained, and
— if T is a class type with a non-trivial constructor (12.1), the constructor call has completed.

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

Это и есть общепринятое понимание созданности объекта.

Цитата(zim22 @  9.4.2009,  16:34 Найти цитируемый пост)
что интересней всего, UnrealMan даже не пытается понять точку зрения собеседника.

Мне понятна его точка зрения, а также понятно то, что человек не знает о принятых в C++ соглашениях и поэтому он совершенно не в теме.

Цитата(zim22 @  9.4.2009,  16:34 Найти цитируемый пост)
Т.е. в классе существует как минимум 1, а если вы определили свой - то два деструктора

Это просто у кого-то в глазах двоится smile 

Цитата(zim22 @  9.4.2009,  16:58 Найти цитируемый пост)
Из книжки:

Важное различие между деструктором и конструктором копий(или оператором присвоения) заключается в том, Что даже при наличии собственного деструктора, синтезируемый деструктор все равно выполняется. Например, для класса Sales_item можно создать следующий пустой деструктор

Выбрось в топку свою книжку. Явно определённый деструктор всего один, а тело деструктора - это одна из его составных частей, которая выполняется первой:

Цитата(12.4 Destructors)
After executing the body of the destructor and destroying any automatic objects allocated within the body, a destructor for class X calls the destructors for X’s direct members, the destructors for X’s direct base classes and, if X is the type of the most derived class (12.6.2), its destructor calls the destructors for X’s virtual base classes.

Цитата(vinter @  9.4.2009,  18:00 Найти цитируемый пост)
Lazin, не прав в своей фразе, оговорка достаточно серьезная, точнее во второй ее части. 

Кстати, да, инициализированность нестатических членов-данных в момент выполнения тела конструктора в общем случае не гарантируется.


PM MAIL   Вверх
J0ker
Дата 10.4.2009, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(UnrealMan @  9.4.2009,  23:41 Найти цитируемый пост)
Кстати, да, инициализированность нестатических членов-данных в момент выполнения тела конструктора в общем случае не гарантируется.

разве? насклько я понимаю иницализация не выполняетя только для POD типов (если эти мемберы отсутствуют в списке инициализации)


--------------------
user posted image
PM MAIL   Вверх
UnrealMan
Дата 10.4.2009, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(J0ker @  10.4.2009,  00:18 Найти цитируемый пост)
разве? насколько я понимаю инициализация не выполняется только для POD типов (если эти мемберы отсутствуют в списке инициализации) 

Ну, вот ты и привёл причину, по которой выделенное жирным

Цитата(Lazin @  16.3.2009,  22:45 Найти цитируемый пост)
во время выполнения тела конструктора объект уже создан и все переменные объекта инициализированы

в общем случае неверно.
PM MAIL   Вверх
J0ker
Дата 10.4.2009, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(UnrealMan @  10.4.2009,  00:37 Найти цитируемый пост)
в общем случае неверно.

я бы не посчитал это придиркой, если б это поведение отличалось бы от случая POD-объекта вне класса  smile 


--------------------
user posted image
PM MAIL   Вверх
Anikmar
Дата 10.4.2009, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



UnrealMan, как хорошо, что вы решили написать - так гораздо лучше, чем анонимные минусы  smile 

Цитата(UnrealMan @  9.4.2009,  23:41 Найти цитируемый пост)
Объект становится созданным в момент начала его lifetime. В случае наличия нетривиального конструктора объект начинает существовать только после полного отрабатывания его конструктора:

Цитата(3.8 Object Lifetime)
The lifetime of an object is a runtime property of the object. The lifetime of an object of type T begins when:
— storage with the proper alignment and size for type T is obtained, and
— if T is a class type with a non-trivial constructor (12.1), the constructor call has completed.

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

Это и есть общепринятое понимание созданности объекта.


Интересно и как с этим не стыкуется моя фраза:

Цитата(Anikmar @  9.4.2009,  13:21 Найти цитируемый пост)
А касаемо собственно обсуждения - говорить, что в теле конструктора объект не создан (собственно с чего начиналась тема) как-то неправильно - все зависит от объекта.

Этим я и имел в виду, что при простейших объектах конструктор может вообще отсутствовать либо в его теле уже можно считать, что он создан. В чем тогда я не прав?
К тому же, если в теле конструктора вылетит исключение, автоматический деструктор вызван будет все равно. А свой деструктор само собой не вызовется.

Цитата(UnrealMan @  9.4.2009,  23:41 Найти цитируемый пост)
Это и есть общепринятое понимание созданности объекта.

Вы все время оперируете только стандартом - теперь общепринятым мнением, как-то нелогично получается. Мнения все разные, просто нужно понимать что делаешь. Все подвести под стандарт нельзя.


PM MAIL ICQ   Вверх
zim22
Дата 10.4.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(UnrealMan @  9.4.2009,  23:41 Найти цитируемый пост)
Выбрось в топку свою книжку.

Это велкикая книжка и я верю ей на 100% smile. Другое дело, что перевод русский мог быть корявым smile
вот англ.версия:

An important difference between the destructor and the copy constructor or assignment operator is that even if we write our own destructor, the synthesized destructor is still run. For example, we might write the following empty destructor for class Sales_item:

Код

class Sales_item {
public:
  Sales_item(std::string s) : isbn(s) { }
  ~Sales_item() { }
private:
  std::string isbn;
  double revenue;
  int units_sold;
};



When objects of type Sales_item are destroyed, this destructor, which does nothing, would be run. After it completes, the synthesized destructor would also be run to destroy the members of the class. The synthesized destructor destroys the string member by calling the string destructor, which frees the memory used to hold the isbn. The units_sold and revenue members are of built-in type, so the synthesized destructor does nothing to destroy them.




--------------------
PM MAIL   Вверх
Anikmar
Дата 10.4.2009, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Если говорить на примере, то если выполнить код:
Код

class Bclass
{
    int b;
public:
    Bclass();
    ~Bclass();
};

Bclass::Bclass()
{
    std::cout << "Constructor Bclass\n";
}

Bclass::~Bclass()
{
    std::cout << "Destructor Bclass\n";
}

class Aclass
{
    int a;
    Bclass b;
public:
    Aclass(int pa);
    ~Aclass();
};

Aclass::Aclass(int pa) : a(10/pa)
{
    std::cout << "Constructor Aclass\n";
    throw 1;
}
Aclass::~Aclass()
{
    std::cout << "Destructor Aclass\n";
}

int _tmain(int argc, _TCHAR* argv[])
{
    Aclass *Ac;

    try
    {
        Ac = new Aclass(10);  // Если сюда поставить 0 - у меня напрочь прога зависает не бесконечных исключениях "деление на 0"
        delete Ac;
    }
    catch(...)
    {
    }
    getch();
    return 0;
}



Итак: исключение в конструкторе.
Но деструктор для поля Bclass b; вызывается автоматически. Т.е. все члены класса, которые создаются автоматически - удаляются автоматически даже если в конструкторе возникло исключение.

PM MAIL ICQ   Вверх
Fazil6
Дата 10.4.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

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



Цитата(Anikmar @  10.4.2009,  12:44 Найти цитируемый пост)
Итак: исключение в конструкторе.
Но деструктор для поля Bclass b; вызывается автоматически. Т.е. все члены класса, которые создаются автоматически - удаляются автоматически даже если в конструкторе возникло исключение.

потрясающе!!! только это никакого отношения к рассматриваемому когда-то давно в начале вопросу не имеет. Весь фокус именно в том, что деструктор самого класса не вызывается потому как создание объекта закончено небыло. 
Причем тут объекты членов класса? Они были коректно созданы и конструкторы их были вызваны. Поэтому и деструкторы их работают

Вобщем пора закругляться с этой темой. 
Никто тут никому ничего не докажет... 
PM MAIL   Вверх
UnrealMan
Дата 10.4.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Anikmar @  10.4.2009,  12:03 Найти цитируемый пост)
Этим я и имел в виду, что при простейших объектах конструктор может вообще отсутствовать либо в его теле уже можно считать, что он создан. В чем тогда я не прав?

В том, что ты апеллируешь к собственновыдуманному пониманию созданности объекта, игнорируя общепринятое.

Цитата(Anikmar @  10.4.2009,  12:03 Найти цитируемый пост)
Вы все время оперируете только стандартом - теперь общепринятым мнением, как-то нелогично получается. Мнения все разные

Слушай, а давай я сейчас напишу на листке бумаги

Цитата
Стандарт C++

Любая программа, написанная на языке C++, должна выводить на экран "C++ - очень плохой язык программирования", и вслед за этим немедленно прекращать своё выполнение.

назову это стандартом C++ и буду всем тут втирать, что вот, согласно стандарту C++, любая программа должна... (и далее по тексту). Мнения по поводу того, что называть стандартом C++, могут быть разные. Ну и в какой цирк тогда превратится форум? Отрицать общепринятые соглашения глупо. Исходя из элементарного здравого смысла, слова автора по умолчанию трактуют общепринятым образом - если автор явным образом не оговорил иное толкование своих слов. Иначе любую фразу можно истолковывать неоднозначно и смысл в общении как таковом отпадает.

Цитата(zim22 @  10.4.2009,  12:31 Найти цитируемый пост)
Это велкикая книжка и я верю ей на 100%

Аминь. Только не думай, что другие тоже должны верить твоей Священной Книге. Самый достоверный источник правил C++ - это стандарт вместе с приведёнными на http://www.open-std.org/jtc1/sc22/wg21/ исправлениями технических опечаток.

PM MAIL   Вверх
zim22
Дата 10.4.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(UnrealMan @  10.4.2009,  16:30 Найти цитируемый пост)
Самый достоверный источник правил C++ - это стандарт 

я не спорю. но мне его ещё рано читать. Перед тем, как научиться бегать неплохо бы освоить ходьбу smile


--------------------
PM MAIL   Вверх
Anikmar
Дата 10.4.2009, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(UnrealMan @  10.4.2009,  16:30 Найти цитируемый пост)
В том, что ты апеллируешь к собственновыдуманному пониманию созданности объекта, игнорируя общепринятое.

Перевожу на русский язык эту фразу и не понимаю:

В том, что ты [апеллируешь][обжалуешь] к собственновыдуманному пониманию созданности объекта, игнорируя общепринятое
Это не издевательство - я не понял в каком контексте используется слово "апеллируешь"

Как я понял, моя вина в том, что я имею собственное мнение игнорируя общепринятое?

Во-первых - я его не игнорирую, а ясно выразил свое мнение.
Цитата(Anikmar @  9.4.2009,  10:41 Найти цитируемый пост)
Лично для меня объект создан тогда - когда им можно пользоваться, привязывать это к конструктору - узковато вроде как получается. 
 Я не сказал, что общепринятое мнение неправильно. Я назвал его несколько узковатым, но не отрицаю и не игнорирую его, а дополняю. Вообще касаемо терминологии, особенно при переводе с другого языка могут быть отклонения. Важно понимать о чем идет речь. Стандарт существует не  для того, чтобы из него сделали идола и молились на него, а для того, чтобы написанная программа гарантировано работала одинаково на всех компиляторах, поддерживающих стандарт. 

зы. 
Цитата

Бегом читать стандарт (п. 3.8 Object Lifetime)

Мы с вами водки вместе не пили, вы не моя жена и не мой начальник, так что что мне делать, когда, бегом или шагом я решаю сам. Если вежливо разговаривать вам мешает стандарт - то я принимаю это к сведению, а если отсутствие воспитания - то сочувствую.


PM MAIL ICQ   Вверх
UnrealMan
Дата 10.4.2009, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Anikmar @  10.4.2009,  17:43 Найти цитируемый пост)
Я не сказал, что общепринятое мнение неправильно.

Значит, это

Цитата(Anikmar @  9.4.2009,  13:21 Найти цитируемый пост)
А касаемо собственно обсуждения - говорить, что в теле конструктора объект не создан (собственно с чего начиналась тема) как-то неправильно - все зависит от объекта. 

Пушкин сказал?

Цитата(Anikmar @  10.4.2009,  17:43 Найти цитируемый пост)
Мы с вами водки вместе не пили

Интересный у тебя критерий восприимчивости smile

Цитата(Anikmar @  10.4.2009,  17:43 Найти цитируемый пост)
Если вежливо разговаривать вам мешает стандарт

Ну, кто-то, видимо, считает вежливым выступать в роли судьи

Цитата(Anikmar @  9.4.2009,  09:58 Найти цитируемый пост)
Так что весьма спорный момент и минус ставить считаю неправильным.

не имея для этого достаточного знания предмета. У меня другие представления о вежливости и необходимости её соблюдения.

Цитата(Anikmar @  10.4.2009,  17:43 Найти цитируемый пост)
я не понял в каком контексте используется слово "апеллируешь"

В контексте оспаривания моей точки зрения.





Это сообщение отредактировал(а) UnrealMan - 10.4.2009, 18:56
PM MAIL   Вверх
Anikmar
Дата 10.4.2009, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(UnrealMan @  10.4.2009,  18:54 Найти цитируемый пост)
Пушкин сказал?

А касаемо собственно обсуждения - говорить, что в теле конструктора объект не создан (собственно с чего начиналась тема) как-то неправильно - все зависит от объекта.
В данной фразе слово как-то обозначает не категорическое мнение, смягченно-сомнительное.

Цитата(UnrealMan @  10.4.2009,  18:54 Найти цитируемый пост)
Ну, кто-то, видимо, считает вежливым выступать в роли судьи

 smile Смешно. Судья - это тот кто судит - этот прав, а этот не прав. Если вы считаете ваши фразы вежливыми - ваше дело.

Цитата(UnrealMan @  10.4.2009,  18:54 Найти цитируемый пост)
не имея для этого достаточного знания предмета

Форумы существуют для обмена мнениями. Кто-то из великих говорил: "Только дурак считает, что он все знает".

Цитата(UnrealMan @  10.4.2009,  18:54 Найти цитируемый пост)
У меня другие представления о вежливости и необходимости её соблюдения.

Это я уже понял  smile 

Цитата

Так что весьма спорный момент и минус ставить считаю неправильным.

Право высказать свое личное мнение имеет каждый участник форума. Если бы я сказал  "Минус ставить - неправильно", то вы были бы правы. В данном случае - вы выступаете в роли судьи,

Цитата(UnrealMan @  10.4.2009,  18:54 Найти цитируемый пост)
В контексте оспаривания моей точки зрения.

Со скромностью и вежливостью - у нас все в порядке  smile 

На этом Роджер.

PM MAIL ICQ   Вверх
vinter
Дата 11.4.2009, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



зря на Анриала бочку катите, он высказывает правильные вещи, пусть и в грубой форме. В конце концов для этого форум и существует, чтобы уберечь себя от будущих ошибок и узнать, что-то новое. На моей памяти UnrealMan ни разу не ошибался в этой ветке форума, так, что не стоит спорить по пустякам, в этой теме он однозначно прав. Так,ч то лучше мотайте на ус и не совершайте в дальнейшем таких ошибок, удачи   smile  


--------------------
Мой блог
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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