c++ - 查找由智能指针引起的内存泄漏

c++ - 查找由智能指针引起的内存泄漏

有人知道一个“技巧”,发现由智能指针引起的内存泄漏吗? 我目前正在使用C++编写的大型项目,大量使用智能指针和引用计数。 很明显,我们有一些由智能指针引起的内存泄漏,这些指针在代码中仍然被引用,所以它们的内存不会被释放。 很难找到带有“不必要的”引用的代码行,导致相应的对象不被释放(尽管它不再使用)。 我在网上找到了一些建议,建议收集引用计数器的增量/减量操作的调用堆栈。 这给了我一个很好的…


c++ - 比较std:: tr1:: function<>对象

我一直试图在C++中实现一个C#类事件系统,用tr1函数模板来存储一个处理事件的函数。 我创建了一个向量,以便多个侦听器可以附加到这个事件,即: vector< function<void(int)>>listenerList; 我想能够从列表中删除一个处理程序,以停止监听器接收事件。 那么,我怎样才能找到这个列表中对应给定的监听器的条目? 我可以测试列表中的“函数”对象是否指向…


如何在C++中实现线程安全引用计数

您如何在C++编程语言的X86 CPU上实现高效且线程安全的引用计数系统 ? 我总是遇到关键操作不是原子的问题,可用的X86互锁操作不足以实现参考计数系统。 以下文章介绍了此主题,但需要特殊的CPU指令: http://www.ddj.com/architect/184401888…


c++ - 智能指针:或谁拥有你的宝贝?

C++全是关于内存所有权的 又名“ 所有权语义 ” 一块动态分配的内存的所有者负责释放该内存。 所以这个问题真的变成谁拥有记忆。 在C++中,所有权由一个RAW指针包装在内部的类型记录,因此在一个好的(IMO)C++程序中,很少见到RAW RAW指针传递过来(因为RAW指针没有推断的所有权,所以我们不能告诉谁拥有记忆,因此如果没有仔细阅读文件,你不能分辨谁对所有权负责)。 相反,…


c++ - 什么是智能指针,我应该什么时候使用它?

什么是智能指针,我应该什么时候使用它?…


c++ - 为什么不应该使用对智能指针的引用?

我记得在某处使用对智能指针的引用会导致内存损坏。 这是否仅仅是因为在智能指针被销毁之后使用了智能指针的引用呢? 还是引用计数搞砸了? 谢谢澄清…


c++ - 习惯用std:: auto_ptr还是只使用shared_ptr?

现在shared_ptr在tr1中,你认为使用std::auto_ptr怎样? 它们都有不同的用例,但是auto_ptr所有用例也可以用shared_ptr来解决。 你会放弃auto_ptr或继续使用它的情况下,你想明确表示只有一个类拥有所有权在任何给定的点? 我的看法是,使用auto_ptr可以增加代码的清晰度,正好通过添加细微差别和代码设计的指示,但另一方面,在培养新的程序员时又增加了一个微…


最好是返回一个C++的参考或weak_ptr?

假设我有一个类,我希望用户能够引用我的一个成员。 哪个是首选? class Member; class ClassWithWeakPtr{private: boost::shared_ptr<Member>_member; public: boost::weak_ptr<Member> GetMember();}; 要么 class Member; class Clas…


c++ - 用new char[n]来使用auto_ptr是错误的

如果我声明一个临时自动删除的字符缓冲区使用 std::auto_ptr<char> buffer(new char[n]); 那么当缓冲区超出范围时,缓冲区会被自动删除。 我会假设使用删除删除缓冲区。 但是,缓冲区是使用new[]创建的,因此严格地说应该使用delete[]删除缓冲区。 有什么可能性,这种不匹配可能会导致内存泄漏?…


c++ - 为什么shared_ptr有一个显式的构造函数

我想知道为什么shared_ptr没有隐式的构造函数。 事实并非如此: 为此获取boost:: shared_ptr(我找出原因,但认为这将是一个有趣的问题,无论如何发布。)#include<boost/shared_ptr.hpp>#include<iostream> using namespace boost; using namespace std; void fun(s…





reset std get unique_ptr shared_ptr头文件 release make_shared shared_ptr用法 header shared_ptr初始化