Những gì bạn muốn làm là không nartually hỗ trợ bởi C++: bạn không thể có một nửa hàm khởi tạo mặc định.
Nhưng những gì bạn muốn đạt được có thể được thực hiện bởi các mẹo nhỏ dưới đây:
xin lưu ý bản demo nhỏ dưới đây có một khiếm khuyết rất nhiều (bộ nhớ bị rò rỉ vv), do đó, nó chỉ cho demostration giải pháp dự kiến chỉ:
//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
}
Hàm tạo bản sao mặc định này không tầm thường – Benoit
Tại sao bạn cần điều này? Bạn không thể thay đổi lớp học? –
Chỉ là tôi có một lớp khá lớn chỉ với một con trỏ duy nhất (Và tôi không thể sử dụng con trỏ thông minh) vì vậy tôi cần viết một hàm tạo bản sao cho nó, nhưng hầu hết các hàm tạo bản sao sẽ chỉ làm những gì mà hàm tạo bản sao mặc định có thể đã thực hiện –