Распределение членов класса C ++ - PullRequest
1 голос
/ 22 октября 2011

Предположим, у меня есть это:

class foo{
    Member member;
    foo();
    ~foo();
};

Как мне распределить член?

РЕДАКТИРОВАТЬ: Как мне сказать, какой конструктор использовать? (Извините за неясность)

Теперь я уже знаю о синтаксисе member = Member(...);

Это приведет к утечке памяти?

{
    Memory *temp = new Member();
    member = *(temp);   //will it work at all??(is it copy constructor?)
    delete temp;
}

Ответы [ 4 ]

6 голосов
/ 22 октября 2011

C ++ не является Java.Этот участник уже выделен.Он является частью памяти экземпляра, в котором он находится. Он будет создан (инициализирован) конструктором содержащего экземпляра.Ключевое слово new не имеет ничего общего с элементом, который не является указателем.

2 голосов
/ 22 октября 2011

Предполагается, что Member не является typedef для типа указателя, т.е. это не , определенное, скажем, как

typedef int* Member;

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

0 голосов
/ 23 октября 2011

Как мне сказать ему, какой конструктор использовать?

Member member в объявлении класса еще не вызывает никакого конструктора, так как это просто объявление.Однако, когда вы определите его позже, вы должны использовать member(), member или member(arg,..) для определения объекта-члена и вызова определенного конструктора.

Код в порядке, и он работает.Просто обратите внимание, что он будет вызывать оператор присваивания, а не конструктор копирования.

0 голосов
/ 22 октября 2011

РЕДАКТИРОВАТЬ: Как я должен сказать ему, какой конструктор использовать? (Извините за неясность)

как это:

foo::foo() : member(...) // member initializer list
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...