【问题标题】:How implement copy constructor for shared data [duplicate]如何为共享数据实现复制构造函数[重复]
【发布时间】:2018-08-06 16:51:44
【问题描述】:

我需要实现一个类的拷贝构造函数

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

这是我的代码:

#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;
}

【问题讨论】:

  • 您不需要复制构造函数,您只需将name 设为静态即可。但这是一个好的设计选择的可能性很小。
  • 听起来是std::shared_ptr 的完美用例。
  • 你为什么想要那个?
  • 这是一道面试题。

标签: c++ copy-constructor


【解决方案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:
   };
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-08
    • 2017-02-23
    • 1970-01-01
    • 2012-08-24
    • 2012-06-22
    • 2018-09-03
    相关资源
    最近更新 更多