为什么在调用构造函数前后,message.pmessage的内存地址相同?如果message.pmessage的内存地址是用new分配的,它应该不一样吗?我糊涂了。

重载操作员功能

CMessage operator+(const CMessage& aMess) const
    {
      cout << "Add operator function called." << endl;
      size_t len = strlen(pmessage) + strlen(aMess.pmessage) + 1;
      CMessage message;

      //
      cout << &message.pmessage << endl;
      cout << message.pmessage << endl;
      message.pmessage = new char[len];
      message.test = new char[len];
      cout << &message.pmessage << endl;
      //

      strcpy_s(message.pmessage, len, pmessage);
      strcat_s(message.pmessage, len, aMess.pmessage);
      return message;
    }


建设者

CMessage(const char* text = "Default message")
{
  cout << "Constructor called." << endl;
  pmessage = new char[strlen(text) + 1];         // Allocate space for text
  strcpy_s(pmessage, strlen(text)+1, text);      // Copy text to new memory
}

最佳答案

您在一个对象内打印指针的地址,当然它总是会相同的。要打印出指针所指向的地址,可以尝试这样做

cout << static_cast<void*>(message.pmessage) << endl;


您需要static_cast<void*>,因为您要避免打印c字符串。

10-08 05:39