自动内存管理
// 自动内存管理
class CObject {
public:
CObject(std::string sName, CObject* opParent = nullptr) : msName(sName), mopParent(opParent) {
if (mopParent != nullptr) {
mopParent->mvAddChindObject(this);
}
}
~CObject() {
// 移除和父对象的映射
if (mopParent != nullptr) {
mopParent->mvRemoveChindObject(this);
}
// 删除子对象
auto lst_chind_obj_temp = mlstChindObject;
for (CObject* op_chind : lst_chind_obj_temp) {
delete op_chind;
}
mlstChindObject.clear();
std::cout << "delete object, name : " << msName << std::endl;
}
// 添加子对象
void mvAddChindObject(CObject* opChild) {
if (opChild == nullptr) {
return;
}
if (auto itor = std::find(mlstChindObject.begin(), mlstChindObject.end(), opChild); itor == mlstChindObject.end()) {
std::cout << msName << " add chind object " << opChild->msName << std::endl;
mlstChindObject.push_back(opChild);
}
}
// 移除子对象
void mvRemoveChindObject(CObject* opChild) {
if (opChild == nullptr) {
return;
}
if (auto itor = std::find(mlstChindObject.begin(), mlstChindObject.end(), opChild); itor != mlstChindObject.end()) {
std::cout << msName << " remove chind object " << opChild->msName << std::endl;
mlstChindObject.remove(opChild);
}
}
private:
std::string msName;
CObject* mopParent;
std::list<CObject*> mlstChindObject;
};
// 测试
void mvTest() {
// 创建父对象
CObject parent("Parent", nullptr);
// 创建子对象
CObject* op_parent_1 = new CObject("Parent1", &parent);
CObject* op_child_1_1 = new CObject("Chind_1_1", op_parent_1);
CObject* op_child_1_2 = new CObject("Chind_1_2", op_parent_1);
CObject* op_child_1_3 = new CObject("Chind_1_3", op_parent_1);
CObject* op_child_1_4 = new CObject("Chind_1_4", op_parent_1);
// 创建子对象
CObject* op_parent_2 = new CObject("Parent2", &parent);
CObject* op_child_2_1 = new CObject("Chind_2_1", op_parent_2);
CObject* op_child_2_2 = new CObject("Chind_2_2", op_parent_2);
CObject* op_child_2_3 = new CObject("Chind_2_3", op_parent_2);
CObject* op_child_2_4 = new CObject("Chind_2_4", op_parent_2);
}
版权声明:本文为weixin_45373355原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。