![]() |
1
8
当标准
智能指针的典型用途是将内存分配为由智能指针管理的资源,以便当智能指针超出范围时,在本例中,通过使用
标准
所以需要自己删除的关键问题是 “调用对象构造函数之前所做的哪些操作需要在对象的析构函数完成后解除绑定并退出?” .
通常情况下,这是一种内存分配,如标准配置
但是,在某些资源(内存除外)的情况下,
因此,当对此类资源使用智能指针时,
一个简单的输出示例
我用
简单Windows控制台应用程序的源代码如下:
上述简单应用程序生成以下输出:
附加职位 What is a smart pointer and when should I use one? Using custom deleter with std::shared_ptr
另请参阅有关Deleter的讨论
Is custom deleter for std::unique_ptr a valid place for manual call to destructor? When does std::unique_ptr<A> need a special deleter if A has a destructor? |
![]() |
2
5
什么时候(显然)
引言中的例子实际上相当好(我欠他们一次之后
trashing them earlier
但是另一种创造性的使用
所以,为了说明这一点,您可以这样做:
你不需要了解任何关于COM的知识就可以理解这里的基本思想。一般来说,释放资源的方法有很多种,合适的自定义删除程序集可以处理所有这些资源,这是一个非常酷的技巧。
啊,我现在真的进入了最佳状态。这是给你的另一个,这次
哦,天哪,你能做的太多了。 |
![]() |
3
3
该示例演示如何利用类型实例的确定性生存期。销毁后发生的事情由析构函数定义(排除内置类型,它们没有内置类型)。析构函数是“清除”其状态的类型的一部分。虽然通常没有太多的工作要做,但是内存分配确实需要清理,在本例中,必须调用一个断开连接函数。这对于手动管理资源的任何类型都是正确的(成员变量的简单聚合或aquantance除外),并且该示例同样可以
当这种类型的生存期由智能指针管理时,使用智能指针的析构函数来清理资源是一种可能,这就是exapmle的目的。这对
将这种情况与那些 不 自定义删除程序是必需的:
这里的资源
|
![]() |
4
2
C++允许您编写自己的自定义分配器。
如果使用自定义分配程序来跟踪内存预算(即,将每个分配分配分配给某个预算,并在超出任何预算时发出警告),则会出现由这一点引起的问题的具体示例。假设这个包裹
如果使用相同类型的包装分配器检测泄漏,则调用
如果你真的因为任何原因手动分配你自己的内存,那么当你
在您的示例中,网络连接的内存将被释放,而不会首先被完全断开连接。在实际情况下,这样做的结果可能是连接的另一端挂起,直到超时为止,或者出现关于断开连接的某种错误。 |