c++ - 指向对象指针数组的指针的深拷贝

标签 c++ arrays pointers

编辑:我最初提出这个问题是断章取意的,所以我重新做了。我已尽可能保持不变,因此您的大部分回复仍然适用。

我无法理解如何实现接受指向指针数组的指针的构造函数。

我有以下类,它包含一个类型为 Body** 的成员 bodies(即,它是一个指向 body 对象指针数组的指针)。

class Galaxy
{
private:
   int n;          // Number of bodies in galaxy.
   Body** bodies;  // Ptr to arr of ptrs to Body objects.

public:
   Galaxy();
   Galaxy(int, Body**);

   // Some other member functions.
};

构造函数的实现如下:

// Default constructor. Initializes bodies to null pointer.
Galaxy::Galaxy() : bodies(NULL) {}

// Alternate constructor. Here I try to perform a deep copy of bodiesIn.
Galaxy::Galaxy(int nIn, Body** bodiesIn)
{
   n = nIn;

   // Allocate memory for an array of n pointers to Body objects.
   bodies = new Body*[n];
   // Perform deep copy.
   for (int i=0; i<n; i++)
   {
      bodies[i] = new Body;
      *bodies[i] = *bodiesIn[i];
   }
}

这种方法是否合理,或者是否有构建此类对象的首选方法。

附言我意识到用 std::vector 编写代码会更容易,但是数组的大小不会改变,并且最小化内存使用量很重要。

最佳答案

你的函数有很多问题:

  1. 创建一个对象然后立即分配给它是低效的,请改用复制构造函数。
  2. 如果除第一个表达式或其中一个赋值之外的任何新表达式抛出异常,则您正在泄漏对象。
  3. 最好使用 std::size_t 作为大小,它是为此设计的。
  4. 最好交换参数,这更符合地道。
  5. 您现在不退还拷贝
  6. 为什么不将其模板化?

顺便说一句:std::unique_ptr 不会增加任何开销,但会提供足够的舒适性和安全性。

关于c++ - 指向对象指针数组的指针的深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25062658/

相关文章:

java - 如何从给定数组中查找元素?

Javascript:检查数组是否是几乎递增的序列

c - 每次更改其内容时都需要更改 char 指针的大小吗?

c++ - 下面代码中指针的使用

c++ - 创建临时 vector

c++ - 如何在 Qt5 中使 QOpenGLContext 成为当前没有表面的?

c++ - Freebsd 的 Makemkv

c++ - 如何对像素数据使用 CImg 函数?

javascript - 从值为零的对象中删除属性

c# - C#中指向类实例的指针