b***i 发帖数: 3043 | 1 我们的项目里有很多类都是IRealObject的子类。构造的时候通常是Object1(
IRealObject* parent)
这些类在构造的时候需要设定一些成员,比如folder。而根据parent可以构造自己的,
比如folder = parent->Folder()+"/"+name。
我最近发现一个问题,就是拷贝构造的时候不复制parent。这个很正常,因为拷贝的和
原来的是不一样的。但是这样的话,拷贝构造的时候无法构造folder,因为无法访问
parent.
我于是提议,改变拷贝构造函数成为Object1(Object&, IRealObject*p=nullptr)。这
样的话,通过传入多余的参数可以解决这个问题。
想听大家的意见。这样做行不行。 |
r****t 发帖数: 10904 | 2 你可以加ctor做这件事,但不能叫做copy ctor |
d***a 发帖数: 13752 | 3 Folder()是private的方法吧?把它改成protected就可以了。Protected就是为这种用
途设计的,让某些成员可以被子类访问但不能被外部访问。
【在 b***i 的大作中提到】 : 我们的项目里有很多类都是IRealObject的子类。构造的时候通常是Object1( : IRealObject* parent) : 这些类在构造的时候需要设定一些成员,比如folder。而根据parent可以构造自己的, : 比如folder = parent->Folder()+"/"+name。 : 我最近发现一个问题,就是拷贝构造的时候不复制parent。这个很正常,因为拷贝的和 : 原来的是不一样的。但是这样的话,拷贝构造的时候无法构造folder,因为无法访问 : parent. : 我于是提议,改变拷贝构造函数成为Object1(Object&, IRealObject*p=nullptr)。这 : 样的话,通过传入多余的参数可以解决这个问题。 : 想听大家的意见。这样做行不行。
|
d***a 发帖数: 13752 | 4 另外,你这个不是copy ctor啊:
Object1(IRealObject* parent)
这样的才是:
IRealObject(IRealObject* obj)
Object1(Object1* obj)
【在 b***i 的大作中提到】 : 我们的项目里有很多类都是IRealObject的子类。构造的时候通常是Object1( : IRealObject* parent) : 这些类在构造的时候需要设定一些成员,比如folder。而根据parent可以构造自己的, : 比如folder = parent->Folder()+"/"+name。 : 我最近发现一个问题,就是拷贝构造的时候不复制parent。这个很正常,因为拷贝的和 : 原来的是不一样的。但是这样的话,拷贝构造的时候无法构造folder,因为无法访问 : parent. : 我于是提议,改变拷贝构造函数成为Object1(Object&, IRealObject*p=nullptr)。这 : 样的话,通过传入多余的参数可以解决这个问题。 : 想听大家的意见。这样做行不行。
|
b***i 发帖数: 3043 | 5 我说的是,Object1(IRealObject* parent)是构造函数。
Object1(Object1&)是拷贝构造函数,但是由于parent没有拷贝,无法使用,所以在构
造成员的时候无法成功。
现在讨论决定,不使用构造函数。
【在 d***a 的大作中提到】 : 另外,你这个不是copy ctor啊: : Object1(IRealObject* parent) : 这样的才是: : IRealObject(IRealObject* obj) : Object1(Object1* obj)
|