我不明白原始指针相当不错,不幸的是我没有允许使用<vector>
S,所以我无法弄清楚如何写出具有另一个类对象作为其财产的数组类的参数的构造函数。
class A{
...
};
class B{
int size;
A *arr;
...
B(int, const A *); // am I declaring this right?
}
...
B::B(int size_, const A *arr_) { // this is the constructor I'm trying to write
size = size_;
if (arr != nullptr) delete[] arr;
arr = new A[size];
memcpy(arr, arr_, sizeof(A) * size);
}
如何在不浪费内存的情况下传递此参数?上面的代码无法正常工作,因此我想听听一些提示。尽管似乎我的问题已经回答了,但我没有设法用Google解决方案,在这种情况下,我深表歉意。
我不允许使用任何安全的std::
东西。我需要弄清楚如何使用C中的手动内存分配来使其工作。糟糕,我的意思是C ++,感谢您指出这一点。
因此,到目前为止,这是对我有用的构造函数:
B::B(int size_, const A *arr_) {
size = size_;
arr = new A[size_];
for (int i = 0; i < size; i++) arr[i] = arr_[i];
}
感谢大家的时间!
在您的构造函数中:
if (arr != nullptr) delete[] arr;
arr
是目前尚未初始化的类成员。它是一个垃圾指针,可能是以外的东西nullptr
,这将尝试到delete
垃圾指针。显然,这不会走得太远。
只需删除它。您的构造函数设置了size
和arr
,这就是它要做的全部。有没有存在的价值size
和arr
担心:你要构造一个新的对象。
memcpy(arr, arr_, sizeof(A) * size);
仅当A
是POD时才有效。相反,请使用std::copy()
,这将在所有情况下都做正确的事情。如果您std::copy()
除了不能使用之外还不能使用std::vector
,请编写一个for循环来手动复制此数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句