是否可以“添加”到默认的拷贝构造函数?是否可以“添加”到默认的拷贝构造函数?
例如,对于这个类:
class A
{
public:
int a;
int* b;
};
我只想写
A::A(const A& rvalue):
a(rvalue.a),
b(new int(*(rvalue.b)))
{}
没有a(rvalue.a)
部分。
(忽略坏/丑陋的代码和可能的内存泄漏)
是否可以“添加”到默认的拷贝构造函数?是否可以“添加”到默认的拷贝构造函数?
例如,对于这个类:
class A
{
public:
int a;
int* b;
};
我只想写
A::A(const A& rvalue):
a(rvalue.a),
b(new int(*(rvalue.b)))
{}
没有a(rvalue.a)
部分。
(忽略坏/丑陋的代码和可能的内存泄漏)
你问什么是不可能的。一旦声明了自己的拷贝构造函数,编译器就不会为你生成拷贝构造函数。这意味着你将无法简单地添加或增加默认的拷贝构造函数,因为它不会存在。这是全部或没有,可以这么说。
请注意,这也是避免需要编写复制构造函数的操作(即:裸指针)的另一个原因。除非你没有别的选择。 –
这是不可能的。
struct A1 { int a1; int a2; // .... int aN; }; struct A:public A1 { int* b; A(const A& rhs): A1(rhs), b(new int(*(rhs.b))) {} };
你想要做的不是nartually由C++的支持是什么:你不能拥有但是,如果你想减少冗余代码为大量的“默认复制”字段,可以用随中级继承来实现一半的默认构造函数。
但是,你想要什么,实现可以通过下面的小技巧来实现:
请注意这个小演示下面有很多缺陷(内存泄漏等),所以它仅适用于笔画演示临时解决方案只:
//class A hasa large number date members(but all can take advantage of default
//copy constructor
struct A{
A(int i):a(i){}
int a;
//much more data memberS can use default copy constructor all in class A
};
//class B is simply wrapper for class A
//so class B can use the default constructor of A
//while just write copy constructor for a raw pointer in it's copy constructor
//I think this is what OP want ?
struct B
{
B(int i,int j):m_a(i),m_b(new int(j)){}
B(const B & rval):
m_a(rval.m_a),
m_b(new int(*rval.m_b))
{
}
A m_a;
int * m_b;
};
int main()
{
B c(2,3); // a=2, *m_b=3
B d(c); //after copy constructor, a=2, *m_b=3
}
我认为这已经被用户提及396672 –
我不知道,因为我只是阅读你的问题,并自己动手解决这个问题...... – Gob00st
这个默认的复制构造函数不是微不足道的 – Benoit
为什么你需要这个?你不能改变班级吗? –
这只是我有一个相当大的类,只有一个指针(我不能使用智能指针),所以我需要为它写一个拷贝构造函数,但大部分拷贝构造函数只是做默认的拷贝构造函数会做 –