Как инициализировать поле константы в конструкторе?

Да, сценарии могут получить доступ к свойствам других окон в том же домене, что у них есть дескриптор на (обычно полученный через window.open/opener и window.frames/parent). Это обычно более управляемо для вызова функций, определяемых на другом окне, а не скрипке с переменными непосредственно.

Однако окна могут умереть или идти дальше, и соглашение о браузерах с ним по-другому, когда они делают. Проверьте, что окно (a) все еще открыто (! window.closed), и (b) имеет функцию, которую Вы ожидаете доступный, прежде чем Вы попытаетесь назвать его.

Простые значения как строки прекрасны, но обычно это не хорошая идея передать сложные объекты, такие как функции, элементы DOM и закрытия между окнами. Если дочернее окно хранит объект от своего новичка, то новичок закрывается, тот объект может стать 'мертвым' (в некоторых браузерах, таких как IE) или вызвать утечку памяти. Могут последовать странные ошибки.

65
задан puccio 30 October 2010 в 09:19
поделиться

6 ответов

Вам нужно сделать это в списке инициализаторов:

Bar(Foo* _foo) : foo(_foo) {
}

(Обратите внимание, что я переименовал входящую переменную в избегайте путаницы.)

77
ответ дан 24 November 2019 в 15:25
поделиться

You need to initialize foo in the initializer list.

class Bar {
    Foo* const foo;
  public:
    Bar(Foo* f) : foo(f) {...}
};
6
ответ дан 24 November 2019 в 15:25
поделиться

Initializing const members and other special cases (such a parent classes) can be accomplished in the initializer list

class Foo {
private:
   const int data;
public:
   Foo(int x) : data(x) {}
};

Or, similarly, for parent initialization

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

class Bar : Foo {
public:
   Bar(int x) : Foo(x) {}
};
14
ответ дан 24 November 2019 в 15:25
поделиться

Используйте ссылку:

Foo& foo;
Bar(Foo& f) : foo(f) { }

Затем вы можете легко ссылаться на foo в Bar :

foo.doSomething();
2
ответ дан 24 November 2019 в 15:25
поделиться

попробуйте: Bar (Foo * xfoo): foo (xfoo) {}

0
ответ дан 24 November 2019 в 15:25
поделиться

I believe you must do it in an initializer. For example:

Bar(Foo* foo) : foo(foo) {
}

As a side note, if you will never change what foo points at, pass it in as a reference:

Foo& foo;

Bar(Foo& foo) : foo(foo) {
}
18
ответ дан 24 November 2019 в 15:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: