【问题标题】:copy constructor+assignment operator [duplicate]复制构造函数+赋值运算符[重复]
【发布时间】:2014-01-17 12:43:42
【问题描述】:

这是我的代码的一部分 ....
//samlple.h.......

class Manager{            
public:                                                
    Manager(cmd::Processor *cp);                    
    virtual ~Manager(void);                                
protected:                                       
    cmd::Processor  *m_Processor;                                       

};         

//samlple.cpp........

//Default constructor                  

Manager::Manager(                
    cmd::Processor  *cp           
) : m_commandProcessor(cp)                
    {            
    g_MgrCommand = new MgrCommand(this);                
}        

运行此程序后,我收到以下警告:
Sample.cpp(97): Info 1732: new in constructor for class 'Manager' which has no assignment operator........

我是 C++ 编码的新手...
你能告诉我如何为我的类编写复制构造函数和赋值运算符来消除这个警告

【问题讨论】:

  • 三(或五)规则

标签: c++ lint


【解决方案1】:

你可以声明一个operator=成员函数:

Manager& Manager::operator=(const Manager&) {
    // ...
    return (*this);
}

当然,函数的第一个参数可以是任何你想要的。

【讨论】:

  • 我可以在哪里写上述声明:在公共或保护区??
【解决方案2】:

您不必实现复制 c'tor/assignment。

关键是,除非你自己实现它们,否则编译器会通过成员复制自动实现它。在您的特定情况下,此自动生成的代码将不正确,因为您将有多个对象指向同一个分配的 MgrCommand

您应该正确实现 c'tor/assignment 运算符(可能通过在每个对象中分配一个单独的 MgrCommand 实例),或者禁用它们。

【讨论】:

  • 我在代码中也有这个警告:Info 1733: new in constructor for class 'Manager' which has no copy constructor
猜你喜欢
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
相关资源
最近更新 更多