【发布时间】:2014-09-21 14:30:39
【问题描述】:
我已经实现了一个简单的结构:
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() -
你在哪里打电话给
_CrtDumpMemoryLeaks()? -
如果你用一对额外的大括号括住
ListenerNode n;怎么办? -
此时
n还没有被破坏。
标签: c++ c++11 memory-management memory-leaks shared-ptr