为什么在调用构造函数前后,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字符串。