gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:02:27 24 4
gpt4 key购买 nike

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

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

我有以下类,它包含一个类型为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com