41得票4回答
析构函数和终结器有什么区别?

请注意:此问题涉及术语“析构函数”和“终结器”的差异及其正确用法。我仅提供了它们在C#和C ++ / CLI中使用的示例,以说明我提出问题的原因。我非常清楚它在C#和CLR中的实现方式,但我正在询问术语的正确用法。 在C#世界中,“析构函数”和“终结器”这两个术语似乎可以互换使用,我怀疑...

41得票3回答
在std::map中正确销毁指针

我有一个被声明为 std::map<std::string, Texture*> textureMap; 我用它来将纹理文件的路径与实际纹理配对,这样我就可以通过路径引用纹理,而不必为每个精灵加载相同的纹理。但我不知道如何在ResourceManager类(其中包含地图)的析...

39得票3回答
Python的__enter__ / __exit__与__init__(或__new__)/ __del__的区别

我搜索过后,无法找到任何使用Python的__enter__/__exit__的好理由,而不是使用__init__(或者__new__?)/__del__。我理解__enter__/__exit__是用于与with语句一起作为上下文管理器使用的,而with语句确实很好用。但是,这样做的相应问题...

39得票11回答
C++析构函数带返回值

如果我们在C++中定义了一个类的析构函数:~Foo(){ return; } 调用此析构函数将销毁Foo对象,或者明确从析构函数返回意味着我们永远不想销毁它。 我希望只有通过另一个对象的析构函数才能销毁特定对象,即只有当另一个对象准备好销毁时才能销毁。 示例:class Class1...

38得票5回答
何时一个对象会“超出范围”?

C++中,什么情况下会将一个对象定义为“超出范围(out of scope)”? 更具体地说,如果我有一个单链表(singly linked list),是什么定义了单个链表节点对象被称为“超出范围(out of scope)”?又如果一个对象存在并且正在被变量ptr引用,那么当该引用被删...

38得票3回答
工会成员的析构函数会被调用吗?

C++11允许在union中使用标准布局类型: Union的成员具有用户定义的构造函数 我的问题是:当union超出其作用域时,我是否保证自定义析构函数将被调用? 我的理解是,在切换时必须手动销毁和构造:http://en.cppreference.com/w/cpp/language/uni...

38得票1回答
析构函数和noexcept

我对析构函数和 noexcept 有些困惑。我的理解是,在 C++11 中,任何析构函数,包括用户定义的,都会隐式地被视为 noexcept(true),即使我们从其中 throw。如果有人出于某种原因希望它不是这样,就必须明确指定 noexcept(false)。 然而,我发现情况恰好相反...

38得票2回答
析构函数在调用exit()时会执行吗?

在C++中,当应用程序调用exit(3)时,堆栈上的析构函数是否应该运行以展开堆栈? 可能重复: exit()或异常会阻止作用域结束时的析构函数被调用吗?

38得票1回答
析构函数异常时返回值的销毁问题

我有以下代码:#include <stdexcept> #include <iostream> struct ok { int _n; ok(int n) : _n(n) { std::cerr << "OK" << n &lt...

37得票7回答
为什么在删除派生类对象时会调用基类析构函数(虚函数)?

析构函数(当然还有构造函数)与其他成员函数的区别在于,如果派生类中的普通成员函数具有函数体,则只有Derived类版本被执行。而在析构函数的情况下,基类和派生类的版本都将被执行。 了解析构函数(可能是虚拟的)和构造函数的确切情况将非常有益,因为即使最终派生类对象被删除,它们也会调用其所有基类...