c++ - 当对象超出范围时,C++ 会调用析构函数吗?

标签 c++ scope stack destructor

<分区>

我以为是的,但是

#include <iostream>

struct S {
    int t;
};

class C {
private:
    S s;
public:
    C() {s.t = 7;}
    ~C(){std::cout << "bye C" << std::endl;}
};

class D {
private:
    S s;
public:
    D(int t) {s.t = t;}
    ~D() {std::cout << "bye D(" << s.t << ")" << std::endl;}
};

int main() {
    C c0();
    C* c1 = new C();
    D d0();
    D d1(42);
    std::cout << __LINE__ << std::endl;
    delete c1;
    std::cout << __LINE__ << std::endl;
}

只打印 ( https://ideone.com/95DK9E )

28
bye C
30
bye D(42)

那么为什么 c0d0 没有通过调用它们的析构函数被正确地析构?

最佳答案

c0d0 不是对象。您已经编写了两个函数声明。

关于c++ - 当对象超出范围时,C++ 会调用析构函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49672618/

相关文章:

c# - 最佳实践 : Validate conditions for method calls?

c++ - cudaTextureObject_t texFetch1D 不编译

c++ - std::deque 和多线程访问

c++ - Assimp 链接器错误 - undefined reference

python - 在此示例中,名称 *open* 属于内置作用域还是全局作用域?

python - 如何让 Python 记住函数内部创建的列表以供将来使用

javascript - 与 javascript 和 d3.js 中的作用域相关的奇怪行为

c - 使用堆栈平衡括号

c - 使用 scanf 进行入栈操作

c - 如果我有一个 C 函数并且我正在使用 gdb 调试它,我如何找到函数的返回值?