gpt4 book ai didi

c++ - 如何正确使用带有智能指针和自定义类的 map 作为键和值

转载 作者:行者123 更新时间:2023-11-30 03:16:45 36 4
gpt4 key购买 nike

我正在尝试制作 map ,在其中我将 Teams 作为键和 Employees 的 vector ,它们作为值是多态的。一些数据将来会从文件中加载,用户可以随时添加新的团队和员工。

这是我想出的 map :

std::map<std::unique_ptr<Team>, std::unique_ptr<std::vector<std::unique_ptr<Employee>>>> teams;

这是我尝试添加新团队和成员的一些测试代码:

bool Company::addTeam(const std::string & projectName)
{
teams.emplace(std::unique_ptr<Team>(new Team(projectName)), std::unique_ptr<std::vector<std::unique_ptr<Employee>>>(new std::vector<std::unique_ptr<Employee>>()));
for (std::map<std::unique_ptr<Team>, std::unique_ptr<std::vector<std::unique_ptr<Employee>>>>::iterator it = teams.begin(); it != teams.end(); ++it) {
std::cout << it->first.get()->getProjectName();
it->second.get()->emplace_back(std::unique_ptr<Employee>(new Programmer("David", "Beckham", "9803268780", "Djoe Beckham", Employee::LevelThree, projectName)));
std::cout << "\n" << it->second.get()->at(0)->toString();
}


return false;
}

代码运行良好,无法打印员工数据,但在关闭应用程序后抛出异常,visual studio 打开 delete_scalar.cpp 并在此代码处触发断点:

void __CRTDECL operator delete(void* const block) noexcept
{
#ifdef _DEBUG
_free_dbg(block, _UNKNOWN_BLOCK); // break point
#else
free(block);
#endif
}

我正在尝试找出我做错了什么以及如何解决它。如果这与问题有关,我的所有 Employees 类的析构函数都是空的。如果我的想法看起来很愚蠢并且有更简单的方法来实现我的目标请告诉我。提前致谢。

最佳答案

在设计方面,一个人可以同时在不同的团队中担任多个角色。它可以是另一个类 Role 将一个人链接到一个团队。不过,无论是团队还是角色在概念上都没有个人对象,因此 Role 可以使用普通指针将 PersonTeam 链接起来。

关于c++ - 如何正确使用带有智能指针和自定义类的 map 作为键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56028350/

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