编辑:我最初提出这个问题是断章取意的,所以我重新做了。我已尽可能保持不变,因此您的大部分回复仍然适用。
我无法理解如何实现接受指向指针数组的指针的构造函数。
我有以下类,它包含一个类型为 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
编写代码会更容易,但是数组的大小不会改变,并且最小化内存使用量很重要。
最佳答案
你的函数有很多问题:
- 创建一个对象然后立即分配给它是低效的,请改用复制构造函数。
- 如果除第一个表达式或其中一个赋值之外的任何新表达式抛出异常,则您正在泄漏对象。
- 最好使用
std::size_t
作为大小,它是为此设计的。 - 最好交换参数,这更符合地道。
- 您现在不退还拷贝
- 为什么不将其模板化?
顺便说一句:std::unique_ptr
不会增加任何开销,但会提供足够的舒适性和安全性。
关于c++ - 指向对象指针数组的指针的深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25062658/