gpt4 book ai didi

c++ - 奇怪的 this-> 行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:50:14 25 4
gpt4 key购买 nike

所以我有以下类(class)

class Community
{
private:
char* Name;
char foundationDate[11];
Person* founder;
int maxMembersCount;
int membersCount;
Person* members;
static int communitiesCount;

.....

我想实现一个复制构造函数:

Community::Community(const Community& other)
{
this->Name = new char[strlen(other.Name)+1];
strcpy(this->Name,other.Name);
strcpy(this->foundationDate,other.foundationDate);
this->founder = other.founder;
this->maxMembersCount = other.maxMembersCount;
this->membersCount = other.membersCount;
this->members = new Person[this->maxMembersCount];
this->members = other.members;
communitiesCount++;
}

但是只要我说社区 A=B,这段代码就会崩溃;所以对我来说这段代码似乎是合法的,但是当我开始调试时出现消息:this->“无法读取内存”。如果您需要更多代码示例,请帮助我,请告诉我。


Community::Community(const char* name , char foundDate[],Person* founder,int maxMembers) {

this->Name = new char[strlen(name)+1];
strcpy(this->Name,name);
strcpy(this->foundationDate,foundDate);
this->founder = new Person(founder->getName(),founder->getEGN(),founder->getAddress());
this->maxMembersCount = maxMembers;
this->membersCount = 2;
this->members = new Person[this->maxMembersCount];
communitiesCount++;

这是该类的主要构造函数,它工作得很好....

最佳答案

这里有多个问题,其中任何一个都可能是部分或全部问题。

  • 如果 NamefoundationDate 不是在右侧以 null 终止,它将运行并复制错误的内存。
  • 如果 foundermembers 为对象所有,如果不在析构函数中删除它们,要么会泄漏内存,要么会导致各种内存- 浅拷贝然后删除两次等相关问题。

要解决这个问题,只需将 NamefoundationDate 设为 std::string,然后设为 foundermembers 由值而不是指针拥有。如果您绝对必须在堆上分配它们,请使用诸如 shared_ptr 之类的智能指针来保存它,而不是使用容易出错的原始指针。

关于c++ - 奇怪的 this-> 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17092723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com