Destructors of global variables are not called

Aberta
#379 0 comentários 1 reação 2 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

@nunoplopes já está trabalhando nisso.

Desde 8/10/2026.

  • #497 de @copilot-swe-agent — fechado sem integrar

Avaliação

Esta issue ainda não foi avaliada.

Descrição

bug
#include <iostream>

struct SideEffectTracker {
    int name;

    explicit SideEffectTracker(int tag) : name(tag) {
        std::cout << "[CONSTRUCTOR] " << name << " initialized.\n";
    }

    ~SideEffectTracker() {
        std::cout << "[DESTRUCTOR]  " << name << " destroyed.\n";
    }

    void touch() const {
        std::cout << "[USAGE]       " << name << " accessed.\n";
    }
};

// 1. Global statics (Initialized before main() in order of declaration)
SideEffectTracker g_global1(1);
SideEffectTracker g_global2(2);

void run_local_statics() {
    // 2. Function-local static (Lazy initialization: only runs on first call)
    static SideEffectTracker s_local_static(3);
    s_local_static.touch();
}

int main() {
    std::cout << "=== Entering main() ===\n\n";

    g_global1.touch();

    std::cout << "\n-- First call to run_local_statics() --\n";
    run_local_statics();

    std::cout << "\n-- Second call to run_local_statics() --\n";
    run_local_statics();

    std::cout << "\n=== Exiting main() ===\n";
    return 0;
    // Static destructors run after this line in REVERSE order of construction
}

should print:

[CONSTRUCTOR] 1 initialized.
[CONSTRUCTOR] 2 initialized.
=== Entering main() ===

[USAGE]       1 accessed.

-- First call to run_local_statics() --
[CONSTRUCTOR] 3 initialized.
[USAGE]       3 accessed.

-- Second call to run_local_statics() --
[USAGE]       3 accessed.

=== Exiting main() ===
[DESTRUCTOR]  3 destroyed.
[DESTRUCTOR]  2 destroyed.
[DESTRUCTOR]  1 destroyed.
Linguagem predominante
Rust
Estrelas
310
Forks
18
Merge médio
10h 18min
PRs com merge (30d)
125

Preparar o ambiente

Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de Cpp2Rust/cpp2rust

Todas as issues de Cpp2Rust/cpp2rust

Issues semelhantes

Mais issues de Rust

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.