禁止在没有用户定义的ctor的情况下显式复制数据成员

| 我有一个关于复制构造函数/复制对象的问题。 我有一个具有一些我不想被复制的属性的类。
class Action : public Cloneable<Action>
{
public:
     //Constructors and other methods are ommitted
    std::vector<BattleCharacter*> Users;
    std::vector<ActionTargetTuple> Targets;
protected:
    ActionType Type;
    std::string Name;
    int UID;
 }
我希望在复制此类对象时不要复制
Users
Targets
向量。有没有办法在不使用自定义副本构造函数的情况下将其标记为明确不可复制?如果不是,并且我使用自定义副本构造函数,是否需要为从该类继承的每个类定义一个自定义副本构造函数?     
已邀请:
默认的复制构造函数将复制所有内容,因此是的-您将需要手动实现复制构造函数以实现此目的。由于这将替换默认的副本ctor,因此您无需为每个继承的类定义一个(除非您想要不同的行为)。     
您将需要定义复制构造函数,以便可以自定义要复制的内容和不复制的内容。 幸运的是,通过这样做,您告诉编译器不要自动生成默认的副本构造函数,您将代替它。因此,不用担心使用默认构造函数的派生类。 解决方案时,请考虑此设计模式。     
您是否需要容器或返回对象之类的复制控制器?如果没有,您可以考虑创建另一种进行复制的方法。     
我同意上面的答案,最好提供复制构造函数和赋值运算符,但是如果由于某些原因(?)不想这样做,请更改用户和目标的类型,作为变体,使用shared_ptr,它将阻止这些成员从深拷贝,例如:
typedef std::vector<BattleCharacter*> USERS;
typedef std::vector<ActionTargetTuple> TARGET;
....
boost::shared_ptr<USERS> Users;
boost::shared_ptr<TARGET> Target;
另外,现在shared_ptr是TR1的一部分,因此可以不加使用而使用。     

要回复问题请先登录注册