如何实现共享数据的副本构造器

时间:2018-08-06 16:51:45

标签: c++ copy-constructor

我需要实现一个类的复制构造函数

我的要求是所有对象都需要共享相同的数据。 例如:如果我更改一个对象的名称,则其他所有对象都将获得新的对象名称。

这是我的代码:

#include <iostream>
using namespace std;

class Contact
{
public:
    string name;

    //Constructor:
    Contact(string n){
        name = n;
    };

    /*
    // Copy constructor:
    */
};

int main(int argc, const char * argv[]) {

    Contact c1("albert");
    Contact c2 = c1; //create a copy of c1

    c1.name = "mark"; //modify c1 name

    cout << c2.name << endl; //My problem: I want this output is "mark"

    return 0;
}

有可能用指针吗?

我尝试此代码,但出现错误: “错误:左值必须作为赋值的左操作数”

// Copy constructor:
Contact (const Contact &c){
    &( this -> name ) = &c.name;
}

1 个答案:

答案 0 :(得分:1)

  

如果我更改一个对象的名称,则其他所有对象都将获得新的对象名称。

这是一个奇怪的要求。一个类的所有实例都具有相同的名称是没有道理的。

不管需求的适当性,需求表明您需要一些独立于类实例的数据。它可以是类的static成员变量,也可以是全局变量,最好是作用于名称空间。

class Contact
{
   public:

      static std::string name;

      //Constructor:
      Contact(){}

      // Copy constructor:
};

namespace MyApp
{
   // Make sure to define it in an appropriate .cpp file.
   extern std::string contact_name;

   class Contact
   {
      public:

         //Constructor:
         Contact(){}

         // Copy constructor:
   };
}