137得票6回答
如何销毁一个对象?

据我所知(了解很少),有以下两种方法:$var = new object() 那么:// Method 1: Set to null $var = null; // Method 2: Unset unset($var); 还有更好的方法吗?我在这里太纠结了吗?

130得票2回答
创建对象:使用或不使用 `new`

可能是重复问题: 使用new与不使用new实例化一个对象有什么区别? 这可能是一个基础问题,也许已经被问过了(比如说这里),但我还是不明白。让我来问一下。 考虑以下C++类:class Obj{ char* str; public: Obj(char* s)...

115得票8回答
在C#中,使用IDisposable与使用析构函数的区别是什么?

什么情况下我应该在类上实现IDispose而不是析构函数?我阅读了这篇文章,但我仍然没有理解重点。 我的假设是,如果我在对象上实现了IDispose,那么我可以显式地“销毁”它,而不是等待垃圾回收器来处理。这个假设正确吗? 这是否意味着我应该总是显式调用对象的Dispose方法?有哪些常见...

114得票3回答
在C#中,类的析构函数和Finalize方法有什么区别?

在一个类中,析构函数和Finalize方法有什么区别(如果有的话)? 最近我发现Visual Studio 2008认为析构函数和Finalize方法是同义词,这意味着Visual Studio不允许在一个类中同时定义这两种方法。 例如,以下代码片段:class TestFinalize { ...

102得票12回答
手动调用析构函数总是设计不良的标志吗?

我在思考:人们说如果你手动调用析构函数,那么你正在做一些错误的事情。但这总是正确的吗?是否存在任何反例?有没有必要手动调用析构函数的情况,或者避免手动调用析构函数很难/不可能/不切实际的情况?

100得票2回答
GNU GCC(g ++):为什么会生成多个析构函数?

开发环境: GNU GCC (g++) 4.1.2 当我尝试研究如何在单元测试中增加“代码覆盖率-特别是函数覆盖率”时,我发现一些类析构函数似乎被多次生成。请问有人知道为什么吗? 我通过使用以下代码进行了尝试和观察。 在“test.h”中: class BaseClass { publ...

99得票1回答
可以在不调用析构函数的情况下跳过goto跳转函数吗?

是不是真的goto可以跳过代码的一部分而不调用析构函数和其他东西? 例如: void f() { int x = 0; goto lol; } int main() { f(); lol: return 0; } 不会泄漏x吗?

98得票1回答
使用unique_ptr进行前向声明

我发现在类的前向声明中结合使用std::unique_ptr非常有用,就像下面的代码一样。它可以在GCC中编译和工作,但整个过程似乎有点奇怪,我想知道这是否是标准行为(即标准要求)?因为当我声明unique_ptr时,B不是一个完整的类型。 A.hpp #include <memor...

98得票3回答
实现 shared_ptr 而不需要要求多态类具有虚析构函数,是否有可能?

Lidström先生和我争论过 :) Lidström先生认为一个这样的构造函数shared_ptr<Base> p(new Derived);并不要求Base必须有虚析构函数: Armen Tsirunyan: "真的吗? shared_ptr会正确清理吗? 请在此情...

92得票3回答
当构造函数抛出异常时,哪些析构函数会被运行?

在C++中,如果构造函数抛出异常,那么运行哪些析构函数? 特别地,在初始化列表或函数体中抛出异常是否有任何区别? 此外,继承和成员变量又如何处理?假设所有已完成的构造都会被析构,如果只构造了一些成员变量,则只有这些成员变量会被析构吗?如果是多重继承,所有已完成的构造函数都会被析构吗?虚拟继...