Что произойдет, если вы будете динамически выделять память для одного объекта класса в качестве аргумента? - PullRequest
2 голосов
/ 31 октября 2019
class Example
{
  private:
   Example* pointer;
   Example* pointer2;
  public:
   Example();
   void setPointer2(Example* object);
};

Example::Example()
{
  pointer = new Example();
}

void Example::setPointer2(Example* object)
{
  this->pointer2 = object;
}

int main()
{
  Example object;
  object.setPointer2(new Example());

  return 0;
}

Удалить не важно. Я просто хочу знать, в чем различия между этими двумя объектами, которые удерживают адреса указателем и указателем2. Они по-разному распределены? Вопрос в том, имеет ли значение, где использовать оператор «new»?

1 Ответ

4 голосов
/ 31 октября 2019

Основная проблема в вашем коде - бесконечная рекурсия ! Определенный вами конструктор:

Example::Example()
{
  pointer = new Example();
}

создает новый объект своего собственного типа. Это вызовет конструктор (снова), и этот вызов вызовет конструктор (снова и снова ...)

Но, кроме этой проблемы, на самом деле не имеет значения, создаете ли вы newобъект, непосредственно назначая его адрес pointer или если вы создаете объект в другом месте, а затем назначаете его адрес (позже) для pointer2. Оба будут указывать на объект класса.

...