复制构造函数应该复制*字符串值

时间:2014-04-05 22:06:38

标签: c++ string copy-constructor dynamic-memory-allocation

我有一个班级:

class BankAccount
{
    string *name;
    string *number;
public:
    BankAccount(BankAccount &);
    ~BankAccount();
};

BankAccount::BankAccount(BankAccount &account)
{
    string nameS = account.name;
    this->name = new string(nameS);
    this->number = new string(account.*number);
}

我想我的复制构造函数将字符串(不是指针,而是由指针指向的字符串)复制到新对象。我尝试了两种不同的方法,但我从未成功过。

编译器消息:

  

conversion from 'std::string* {aka std::basic_string<char>*}' to non-scalar type 'std::string {aka std::basic_string<char>}' requested

     

'((BankAccount*)this)->BankAccount::number' cannot be used as a member pointer, since it is of type 'std::string* {aka std::basic_string<char>*}'

2 个答案:

答案 0 :(得分:2)

BankAccount类可能只包含字符串对象而不是指向字符串的指针

class BankAccount
{
    string name;
    string number;
};

编辑:正如其他用户所指出的那样,你现在不再需要编写复制构造函数或析构函数,因为std字符串可以自行处理

答案 1 :(得分:2)

根据其他注释和答案,在这种情况下,不需要使用指针作为实例变量。你最好只是让实例变量成为实际的字符串。但只是为了解释你的问题:

string nameS = account.name;

account.name是指向字符串的指针,因此您需要:

string nameS = *account.name;

在此声明中:

this->number = new string(account.*number);

您正在解除引用错误。它应该是:

this->number = new string(*account.number);