Tag: 析构函数

在C#中,析构函数和Finalize方法在类中有什么不同?

在一个类的析构函数和Finalize方法之间有什么区别,如果有的话? 我最近发现Visual Studio 2008认为析构函数与Finalize方法同义,这意味着Visual Studio不会让您同时在类中定义两个方法。 例如,下面的代码片段: class TestFinalize { ~TestFinalize() { Finalize(); } public bool Finalize() { return true; } } 给析构函数中的Finalize调用提供以下错误: 这个调用在下面的方法或属性之间是不明确的:'​​TestFinalize。〜TestFinalize()'和'TestFinalize.Finalize()' 如果Finalize的调用被注释掉了,则会出现以下错误: types'ManagementConcepts.Service.TestFinalize'已经使用相同的参数types定义了一个名为'Finalize'的成员

什么时候调用C ++析构函数?

基本问题:程序什么时候在C ++中调用类的析构函数? 我被告知,只要对象超出范围或遭到delete ,就会调用它 更具体的问题: 1)如果对象是通过一个指针创build的,并且该指针稍后被删除或者指定了一个新的地址,那么它指向的对象调用它的析构函数(假设没有其他东西指向它)? 2)在问题1之后,什么定义了什么时候一个对象超出了范围(而不是关于什么时候一个对象离开给定的{block})。 换句话说,什么时候在链表中调用一个析构函数? 3)你是否想要手动调用析构函数?

最好的方法来销毁PHP对象?

据我所知(这是非常less的),有两种方法,给出: $var = new object() 然后: // Method 1: Set to null $var = null; // Method 2: Unset unset($var); 其他更好的方法? 我在这里分开头发吗? 干杯!

使用IDisposable与C#中的析构函数有什么区别?

我什么时候在类上实现IDispose而不是析构函数? 我读了这篇文章 ,但我仍然没有理解这一点。 我的假设是,如果我在一个对象上实现IDispose,我可以显式地“销毁”它,而不是等待垃圾收集器去做。 它是否正确? 这是否意味着我应该总是明确地调用一个对象上的Dispose? 这是什么常见的例子?

删除调用析构函数吗?

我有一个类(A)使用堆内存分配的一个领域。 类A被实例化并作为指针字段存储在另一个类(B)中。 当我完成对象B,我打电话给删除,我假设调用析构函数…但是这是否也调用类A中的析构函数? 编辑: 从答案中,我认为(如果不正确,请编辑): delete B实例B调用B ::〜B(); 它调用A::~A(); and A::~A 应该明确地delete and A::~A所有堆分配成员variables。 最后将存储所述B实例的内存块返回给堆 – 当使用new时,它首先在堆上分配一块内存,然后调用构造函数对其进行初始化,现在在调用所有析构函数完成对象对象所在的块返回到堆中。

什么时候应该创build一个析构函数?

例如: public class Person { public Person() { } ~Person() { } } 什么时候应该手动创build一个析构函数? 你什么时候需要创build一个析构函数?

将析构函数作为私有的用途是什么?

将析构函数作为私有的用途是什么?

什么时候__destruct不会被PHP调用?

class MyDestructableClass { function __construct() { print "\nIn constructor\n"; $this->name = "MyDestructableClass"; } function __destruct() { print "\nDestroying " . $this->name . "\n"; } } $obj = new MyDestructableClass(); 当上面的脚本处于一个复杂的环境中时,__destruct在exit时不会被调用,但是我不能很容易地重现它。有没有人注意到这个? 编辑 我将在这里发布整个东西,这是symfony的testing环境,这意味着如果你熟悉框架,你可以很容易地重现它: require_once dirname(__FILE__).'/../bootstrap/Doctrine.php'; $profiler = new Doctrine_Connection_Profiler(); $conn = Doctrine_Manager::connection(); $conn->setListener($profiler); $t = new lime_test(0, new lime_output_color()); class MyDestructableClass { function __construct() { print […]

GNU GCC(g ++):为什么会产生多个dtors?

开发环境:GNU GCC(g ++)4.1.2 当我试图调查如何在unit testing中增加“代码覆盖率 – 特别是函数覆盖率”时,我发现一些类似于生成多次的代码。 请问你们有些人有什么想法吗? 我试过,并通过使用下面的代码观察了我上面提到的。 在“test.h” class BaseClass { public: ~BaseClass(); void someMethod(); }; class DerivedClass : public BaseClass { public: virtual ~DerivedClass(); virtual void someMethod(); }; 在“test.cpp” #include <iostream> #include "test.h" BaseClass::~BaseClass() { std::cout << "BaseClass dtor invoked" << std::endl; } void BaseClass::someMethod() { std::cout << "Base class method" << […]

C ++是否调用全局和类静态variables的析构函数?

从我的示例程序看来,它在两种情况下都会调用析构函数。 在什么时候它会调用析构函数的全局variables和类静态variables,因为它们应该被分配到程序堆栈的数据部分?