我正在为大学做一个项目,想找出如何正确删除内存,以及我想出的删除方式是否与使用智能指针具有相同效果。
这是一个类,它将保存公司所有员工和团队,基本上具有指向某些员工的指针向量。
我的问题是:这种释放内存的方法是否正确,如果正确,它是否能够提供与使用智能指针自动化过程相同的结果。
如果使用智能指针是更好的实践,那么在我的情况下我应该使用unique或shared指针?我已经阅读了有关智能指针的内容,它们会在作用域结束时删除分配的内存,但我真的很困惑什么时候结束。这将发生在公司构造函数被调用时吗?
提前感谢您的回答,如果我的问题看起来很愚蠢,请原谅。
这是一个类,它将保存公司所有员工和团队,基本上具有指向某些员工的指针向量。
class Company
{
private:
std::string companyInfo;
std::vector<Employee * > employees;
std::vector<Team *> teams;
public:
Company();
~Company();
std::string getCompanyInfo() const;
void setCompanyInfo(const std::string & companyInfo);
bool addEmployee(Employee * employee, const std::string & teamName);
bool addTeam(Team * team);
void printTeams() const;
void printEmployees() const;
};
我的问题是:这种释放内存的方法是否正确,如果正确,它是否能够提供与使用智能指针自动化过程相同的结果。
Company::~Company()
{
for (Employee * e : employees) {
delete e;
}
employees.clear();
for (Team * t : teams) {
delete t;
}
teams.clear();
}
如果使用智能指针是更好的实践,那么在我的情况下我应该使用unique或shared指针?我已经阅读了有关智能指针的内容,它们会在作用域结束时删除分配的内存,但我真的很困惑什么时候结束。这将发生在公司构造函数被调用时吗?
提前感谢您的回答,如果我的问题看起来很愚蠢,请原谅。
unique_ptr
可能更好,但你为什么首先使用指针呢?为什么不直接使用例如std::vector<Employee>
? - lisyarusstd::vector<Employee>
是您的朋友。 - Swordfishstd::vector<Employee> employees;
元素的非所有权原始指针。只需确保在解雇时两者都被删除^^ - Swordfish