【发布时间】:2022-01-23 04:01:39
【问题描述】:
我有一个函数,其中 shared_ptr 的循环依赖。因此我有内存泄漏。我该如何解决它?
void down(std::shared_ptr<Node> &curr, uint8_t level) {
curr->left->parent = curr;
curr->right->parent = curr;
if (!curr->left->visited_) {
curr = curr->left;
curr->visited_ = true;
} else {
curr = curr->right;
curr->visited_ = true;
}
curr->level_ = curr->parent->level_ + 1;
while (curr->level_ != level) {
if (curr->left == nullptr) {
curr->left = std::make_shared<Node>();
}
curr->left->parent = curr;
if (curr->right == nullptr) {
curr->right = std::make_shared<Node>();
}
curr->right->parent = curr;
curr = curr->left;
curr->visited_ = true;
curr->level_ = curr->parent->level_ + 1;
}
}
【问题讨论】:
-
简单的解决方案是不要将 shared_ptr 用于您的父指针。对它们使用weak_ptr 或原始/C 风格的指针。
-
我猜你需要一个从孩子到父母的弱指针。但是,你能显示一个minimal reproducible example吗?至少要查看您的
Node结构。 -
``` struct Node { std::weak_ptr
parent; std::shared_ptr 左; std::shared_ptr 对;整数值_ = -1;诠释级别_;布尔访问_ =假; }; ```
标签: c++ memory-leaks shared-ptr