Re[2]: this при инициализации члена класса
От: Вадим Никулин Россия Здесь
Дата: 16.04.05 08:18
Оценка: +3
Здравствуйте, Goryh, Вы писали:

G>В данный момент, когда используется this, объект А еще не сконструирован, поэтому указатель не представляет

G>из себя валидного значения, скорее всего, это просто мусор.

Позволю себе не согласиться. В указателе лежит вполне валидное значение. А вот сам объект действительно не сконструирован. Максимум, что должен сказать компилятор — выдать предупреждение. VC7.0, VC7.1 так и делают. Comeau вообще без предупреждений компилит. Если VC6 совсем не компилит — значит это баг компилятора.
Re: this при инициализации члена класса
От: Goryh  
Дата: 16.04.05 07:25
Оценка: -2
Здравствуйте, <Аноним>, Вы писали:

А>Почему VC++ 6 не позволяет передавать this в указанном месте?

А>
А>class A;

А>class B {
А>      A *m_pa;

А>public:
А>      B(A *pa) : m_pa(pa) { }
А>};

А>class A {
А>      B m_b;
А>public:
А>      A() : m_b(this) { } // здесь
А>}
А>


В данный момент, когда используется this, объект А еще не сконструирован, поэтому указатель не представляет
из себя валидного значения, скорее всего, это просто мусор.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
this при инициализации члена класса
От: Аноним  
Дата: 16.04.05 05:33
Оценка:
Почему VC++ 6 не позволяет передавать this в указанном месте?
class A;

class B {
      A *m_pa;

public:
      B(A *pa) : m_pa(pa) { }
};

class A {
      B m_b;
public:
      A() : m_b(this) { } // здесь
}
Re: this при инициализации члена класса
От: Mr.Chipset Россия http://merlinko.com
Дата: 16.04.05 06:41
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Почему VC++ 6 не позволяет передавать this в указанном месте?

А>
А>class A;

А>class B {
А>      A *m_pa;

А>public:
А>      B(A *pa) : m_pa(pa) { }
А>};

А>class A {
А>      B m_b;
А>public:
А>      A() : m_b(this) { } // здесь
А>}
А>


Во-первых, у вас отсутствует запятая после обьявления класса A.
Во-вторых, немного не понял: this это указатель, а m_b это ж просто обьект?
MinGW правда всё скомпилил..
Таким образом это "причуды" VC6.
... << RSDN@Home 1.1.4 beta 5 rev. 411>>
"Всё что не убивает нас, делает нас сильнее..."
Re[3]: this при инициализации члена класса
От: Вадим Никулин Россия Здесь
Дата: 16.04.05 08:31
Оценка:
Здравствуйте, Вадим Никулин, Вы писали:

ВН>Здравствуйте, Goryh, Вы писали:


G>>В данный момент, когда используется this, объект А еще не сконструирован, поэтому указатель не представляет

G>>из себя валидного значения, скорее всего, это просто мусор.

ВН>Позволю себе не согласиться. В указателе лежит вполне валидное значение. А вот сам объект действительно не сконструирован. Максимум, что должен сказать компилятор — выдать предупреждение. VC7.0, VC7.1 так и делают. Comeau вообще без предупреждений компилит. Если VC6 совсем не компилит — значит это баг компилятора.


Чтобы не быть голословным — все это описано в пункте 12.7 стандарта.
Re: this при инициализации члена класса
От: Кодт Россия  
Дата: 16.04.05 11:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Почему VC++ 6 не позволяет передавать this в указанном месте?


У меня VC6sp6 всё компилирует (про }; тебе уже сказали).
Ищи проблемы в другом месте. А может быть, ты привёл код, не эквивалентный проблемному.
Перекуём баги на фичи!
Re[2]: this при инициализации члена класса
От: Аноним  
Дата: 16.04.05 16:52
Оценка:
А>>Почему VC++ 6 не позволяет передавать this в указанном месте?
К>У меня VC6sp6 всё компилирует (про }; тебе уже сказали).
К>Ищи проблемы в другом месте. А может быть, ты привёл код, не эквивалентный проблемному.
Точку с запятой случайно пропустил когда набирал пример. Код действительно совсем не этот но смысл тот же. В классе производном от CView хотел создать объект для modeless диалога и передавал туда адрес "владельца." Не помню уже даже что компилятор выдал мне (ошибку или предупреждение — скорее всего второе) но думаю что "ему не понравилось" что я передаю адрес на еще не созданный объект хотя this, как верно заметил Вадим Никулен, валиден, и я не обращался к "владельцу" из конструктора modeless диалога.

Скорее всего компилятор предостерег против возможности обратиться к несконструированному объекту из конструктора диалога.

Благодарю всех ответивших на мой вопрос!!! Код переписал чуточку по-другому.
Re[4]: this при инициализации члена класса
От: Аноним  
Дата: 16.04.05 16:59
Оценка:
ВН>Чтобы не быть голословным — все это описано в пункте 12.7 стандарта.
Ламерский вопрос. Вы всегда обращаетесь к Страуструпу или этот стандарт доступен он-лайн? Если второе, то можно ссылку?
Re[5]: this при инициализации члена класса
От: Mr.Chipset Россия http://merlinko.com
Дата: 16.04.05 23:56
Оценка:
Здравствуйте, <Аноним>, Вы писали:

ВН>>Чтобы не быть голословным — все это описано в пункте 12.7 стандарта.

А>Ламерский вопрос. Вы всегда обращаетесь к Страуструпу или этот стандарт доступен он-лайн? Если второе, то можно ссылку?

Было бы интересно, может кто нибудь знает где он он-лайн лежит
Но я к примеру, пользуюсь, International Standart ISO/IEC ISO/IEC 9899:1999 (E).
... << А писал я весь этот бред на RSDN@Home 1.1.4 beta 5 rev. 411, под звуки silent >>
"Всё что не убивает нас, делает нас сильнее..."
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.