c++ - 如果您将类的一个对象作为参数动态分配内存,会发生什么情况?

标签 c++ dynamic new-operator

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”运算符重要吗?

最佳答案

您的代码中存在的一个主要问题是无限递归!您定义的构造函数:

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

创建一个自己类型的新对象。这将(再次)调用构造函数,并且该调用将调用构造函数(一次又一次......)

但是,除了这个问题之外,无论您是通过直接将其地址分配给 pointer 来创建一个 new 对象,还是在其他地方创建该对象,这并不重要然后将其地址(稍后)分配给pointer2。两者都将指向该类的一个对象。

关于c++ - 如果您将类的一个对象作为参数动态分配内存,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58644901/

相关文章:

c# - 在 C#/.NET 4.0 中填充和使用动态类

r - 基于用户输入 Shiny 的 ggplot 突出显示区域

c# - 成员隐藏,其实际用途是什么

c++ - 新建、删除、malloc 和免费

c++ - 可更新的优先级队列

c++ - 比较 int 的正向和反向循环,其中一个限制为 0

c++ - 为什么我的函数不跳过尝试解析为不兼容的模板函数,而是默认解析为常规函数?

java - 在 Java 中使用循环创建变量名?

java - 如何找出我的进程 ID 正在哪个物理 CPU 上运行?

c++ - 更改现有对象 "on the fly"的 VTBL,动态子类化