使用C ++复制构造函数以便稍后在函数中使用

时间:2014-04-22 17:29:08

标签: c++ object copy-constructor

我查看了不同的帖子,我很难理解如何使用复制构造函数。

如果我想操纵我的课程,但我需要有原始值,我必须创建一个副本。

    class object {
           public:
           int member[5][5];

           object(object&); <-- how do we create a copy here?

           void manipulate() {
             <<-- how do I call it here?
           }
};

我一直在尝试object copy = object(object&)之类的不同内容,但它不起作用。

3 个答案:

答案 0 :(得分:4)

  

object(object&); <-- how do we create a copy here?

一种简单的方法是省略声明,让C ++编译器为你做。由于您的对象不在其构造函数体中分配资源,因此C ++可以为您创建复制构造函数。

  

<<-- how do I call it here?

像这样:

object copy(*this);
... // Manipulate it here

答案 1 :(得分:1)

object( const object &obj )
{
   for ( size_t i = 0; i < 5; i++ )
   {
      for ( int j = 0; j < 5; j++ )
      {
         member[i][j] = rhs.member[i][j];
      }
   }
}

或者你可以写简单

object( const object &obj ) = default;

因为您的复制构造函数没有做一些特别的事情。

至于它的使用,你可以用以下方式

object one;
onject two( one );

object one;
onject two = one;

或甚至

object one;
onject two { one };

object one;
onject two = { one };

还要考虑到,如果您明确定义了复制构造函数,那么您应该明确定义默认构造函数,如果需要它。

答案 2 :(得分:0)

通常会创建复制构造函数,因为您无法使用编译器生成的复制构造函数。在这种情况下,您通常会逐个复制每个成员。

例如(动态编写 - 不确定它是否会编译错误/警告)

class A
{
public:
    A();
    A(const A& src)
    {
        m_array = (char*)new char[src.m_arraySize];
        memcpy(m_array, src.m_array, src.m_arraySize);
        m_arraySize = src.m_arraySize;
    }
private:
    char* m_array;
    int m_arraySize;
};