Как вы можете вызвать конструктор c ++ где-то, кроме того, где вы определяете переменную без вызова new? - PullRequest
2 голосов
/ 01 ноября 2011

У меня есть класс, настроенный так:

class Foo {
  Foo();    

  private:
     Bar m_bar;
}

Это определение класса в его собственном заголовочном файле, и теперь в исходном файле, чтобы пойти с ним, у меня есть конструктор, и я попытался сделать это:

Foo::Foo() {
  m_bar("parameters for the Bar constructor");
}

Однако это не работает и выдает ошибку. Я могу сделать указатель m_bar, а затем в конструкторе Foo сделать это:

m_bar = new Bar("parameters here");

Однако это делает m_bar указателем, а я этого не хочу.

Я не лучший в классах и указателях C ++, поэтому что-то может объяснить мне способ определения m_bar в классе Foo, но конструктор где-то в другом месте, или если в этой ситуации лучше сделать указатель m_bar Зачем? Хотя я бы предпочел не указывать указатель (потому что я не очень хорошо понимаю указатели), если это лучший способ сделать это, я бы предпочел сделать это таким образом, но я все же хотел бы, чтобы кто-то объяснил, почему это это лучший способ сделать это (если это так).

Ответы [ 3 ]

3 голосов
/ 01 ноября 2011

Да, используя синтаксис списка инициализатора:

Foo::Foo() : 
  m_bar("parameters for the Bar constructor")
{
}
1 голос
/ 01 ноября 2011

Вам необходимо использовать списки инициализации:

Foo::Foo() :
m_bar("and you ought to check out a good C++ book :)")
{
    // Book list: http://tinyurl.com/so-cxxbooks
}
0 голосов
/ 01 ноября 2011

Если я вас правильно понимаю, вы можете использовать конструктор список инициализации для этого.

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