Переменная, изменяющая вывод - PullRequest
2 голосов
/ 21 января 2020

Так что я просто приведу быстрый пример и могу использовать некоторую помощь в понимании того, что случилось

Я запускаю тест с закомментированной переменной «RandomNumber», и вывод получился

Construct
Invoke
Destruct

Итак, я снова запустил тест, но с некомментированной переменной «RandomNumber», и результат был

Construct
Destruct
Invoke

Я пробовал это много раз с одним и тем же результатом, но я не совсем понимаю, почему эта переменная меняет время жизни тестера ... Тест:

struct Container 
{
    template<typename T>
    Container(T&& O) : Data((void*)std::addressof(O)) {}

private:
    void* Data;
    //std::weak_ptr<int> RandomNumber;
};

struct Tester
{
    Tester() { std::cout << "Construct" << std::endl; }
    ~Tester() { std::cout << "Destruct" << std::endl; }
};

void TestFunction1(const std::vector<Container>& Data)
{
    std::cout << "Invoke" << std::endl;
}

int main()
{
    TestFunction1({ Tester() });
    return 0;
}

Ответы [ 2 ]

1 голос
/ 23 января 2020

После тестирования на нескольких конфигурациях результат варьируется от системы к системе и от компилятора к компилятору. Следовательно, трудно предсказать, каким может быть результат.

1 голос
/ 21 января 2020

После многократного выполнения кода на Windows 10 я заметил, что он выдает почти одинаковый вывод независимо от того, прокомментирован weak_ptr<int> RandomNumber или нет:

Construct
Invoke
Destruct

Это означает, что вывод отличается в системах как другие онлайн-компиляторы дали тот же результат, что и вы. Наиболее вероятная причина - выходные данные зависят от системы / компилятора и различных оптимизаций, которые выполняет компилятор.

...