我正在阅读 Stroustrup 的“A Tour of C++”,在第 77 页我遇到了这个建议:
如果一个类有一个指针成员,它可能需要一个用户定义或删除的析构函数,复制和移动。
那些。这好像是
如果一个类有一个指针成员,它可能需要一个自定义或远程析构函数、复制和移动。
关于复制和移动 - 毫无疑问,一切都很清楚,关于自定义析构函数 - 也是。
但是远程析构函数是什么意思呢?不打算写
~Class() = delete;
它能给什么?毕竟,这样的对象既不能在离开范围时自动删除,也不能通过delete
(new
分别是明确的、本地的和选择的)删除。
这里的深层含义是什么——创造不朽的对象?:)
PS 写信给 Stroustrup,要求解释 :) 他同意措辞不是最准确的,提出了一个变体
如果一个类有指针成员,考虑是否需要用户定义或删除的析构函数,复制和移动;
至于我,差异很小,但是......在这方面,@lёxölüt 的答案更接近现实,因此我接受它。
含义来自三(五)规则。并且应该在组(用户定义或删除)和(析构函数,复制和移动)中读取。那些。提到的任何功能都应该由用户定义或删除。
对远程析构函数的强调显然是由于这些词并排的位置。这种情况比复制/移动更特殊,可能已经反映在原始句子中,但它会变得更加冗长。这对对象的影响已经在一个相邻的答案中已经说过了,事实上,在问题本身中也是如此。
值得注意的是,在堆上创建对象时(它不会在堆栈上工作,因为实现本身会将析构函数调用插入到代码中),但是,您可以避免可疑的泄漏,使用全局运算符就足够了
new
/delete
和放置new
:想到声明一个删除了析构函数的类的唯一原因是,这些对象不能被声明为自动或静态的,不能用作子对象,但可以在动态内存中创建,前提是它们没有被释放,即 . e. 会故意发送到内存泄漏。
然而,通过一个简单的指针与资源管理主题有什么联系 - 目前尚不清楚。也许只是一个糟糕的措辞。