Visual Studio 2013 баг
От: ZiloT  
Дата: 24.10.13 16:21
Оценка: 124 (11)
Всем привет!
Наткнулся на багу в компиляторе в новой студии


#include <vector>
#include <memory>
#include <iostream>

struct Base
{
    virtual ~Base() {}

    virtual void touch() = 0;
};

struct A : public Base
{
    A()
    {
        std::cout << "A()" << std::endl;
    }

    virtual void touch() override
    {
        std::cout << "A::touch()" << std::endl;
    }

    virtual ~A()
    {
        std::cout << "~A()" << std::endl;
    }
};

struct B : public Base
{
    B()
    {
        std::cout << "B()" << std::endl;
    }

    virtual void touch() override
    {
        std::cout << "B::touch()" << std::endl;
    }

    virtual ~B()
    {
        std::cout << "~B()" << std::endl;
    }
};

int main(int argc, char* argv[])
{
    std::vector<std::shared_ptr<Base>> m = {
        std::make_shared<A>(),
        std::make_shared<B>()
    };

    std::cout << "mmm" << std::endl;

    for (auto i : m)
        i->touch();

    
    return 0;
}


Результат работы:

GCC 4.7.2

A()
B()
mmm
A::touch()
B::touch()
~B()
~A()


Visual Studio 2013 RTM

A()
B()
~A() // ???
mmm
// тут краш при обращении к первому элементу, так как он уже удалился...


В общем, получается с микрософтом как всегда, чтоб нормально пользоваться, надо ждать первого, а то и второго update'а
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.