【发布时间】:2019-10-25 00:17:59
【问题描述】:
我想构建一个复制构造函数Pair(const Pair& other)。它的参数是对另一个Pair 的只读引用。它应该将新构建的Pair 设置为“深拷贝”。但是我不知道如何在这些新位置设置整数,应该根据另一个Pair指向的整数来分配值。
class Pair {
public:
int *pa,*pb;
Pair(int a, int b);
Pair(const Pair & other);
~Pair();
};
Pair::Pair(int a, int b){
pa = new int;
pb = new int;
*pa = a;
*pb = b;
}
Pair::Pair(const Pair & other){
pa = new int;
pb = new int;
*pa = *(other.pa);
*pb = *(other.pb);
}
Pair::~Pair(){
delete pa;
delete pb;
}
int main() {
Pair p(15,16);
Pair q(p);
Pair *hp = new Pair(23,42);
delete hp;
std::cout << "If this message is printed,"
<< " at least the program hasn't crashed yet!\n"
<< "But you may want to print other diagnostic messages too." << std::endl;
return 0;
}
【问题讨论】:
-
你让它变得比它需要的复杂得多。类中的 A 和 B 成员应该是 int 而不是指向 int 的指针,并且您不需要专门 malloc 那些。此外,假设您在构造函数中时已经分配了对象,只需将传入的值复制到您的成员变量中。
-
int *pa = new int;在你的两个构造函数中,与类成员pa无关。你的意思是pa = new int;?另外,a = *pa;是倒退的,你是说*pa = a;吗?pb也是如此。除此之外:您正在泄漏内存,因为您从未delete它。考虑向good C++ book学习。 -
@RussSchultz 如果将这些变量设为
ints,而不是指向ints 的指针 - 用户定义的复制构造函数没有任何作用,因为编译器生成的复制构造函数可以满足人们的所有需求. -
@Algirdas Preidžius 对于“指向 int 的指针”,它们旨在指向存储整数的堆内存位置。
-
@robinzx117 你已经有了一个拷贝构造函数。为什么你认为它没有做你想做的事?
标签: c++ pointers constructor copy-constructor deep-copy