我已经实现了一个简单的结构体:
struct ListenerNode
{
ListenerNode() : previous(nullptr), next(nullptr), listener(nullptr), once(false) {}
std::shared_ptr<ListenerNode> previous;
std::shared_ptr<ListenerNode> next;
std::function<void(int)> listener;
bool once;
};
这将代表一个场景图实现中的实体。我观察到的奇怪行为是,当我简单地使用结构体时:
int main(int argc, char** argv)
{
ListenerNode n;
}
它存在内存泄漏问题,但当我按照以下方式使用它时:
int main(int argc, char** argv)
{
ListenerNode* n = new ListenerNode();
delete n;
}
它不会泄漏内存!我不明白这里发生了什么。我一直认为在没有使用new
的情况下创建类/结构体的实例时,当变量超出范围时会立即调用析构函数。
有人能解释一下这里发生了什么吗?我没有看到任何明显的引用计数增加。
_CrtDumpMemoryLeaks()
函数? - R SahuListenerNode n;
周围加上额外的一对大括号会怎么样? - timraun
尚未被销毁。 - timrauint main(int argc, char** argv) { { ListenerNode n; } }
- billz