[msvc2013 bug] virtual funtions return type
От: Aleх  
Дата: 29.03.14 19:43
Оценка: 88 (6)
Компилируется такой код:

#include <vector>
#include <memory>

struct Base
{
    virtual std::vector<int> foo() const = 0;
};

template<class T>
struct Class
    : Base 
{
    virtual double foo() const override
    {
        return 123;
    }
};

int main()
{
    std::unique_ptr<Base> ptr = std::make_unique<Class<int>>(); // можно заменить на make_shared и т.д.
    std::vector<int> res = ptr->foo();

    return 0;
}


В данном случае испортится стек при вызове функции foo. Если в классе Class у функции foo сделать возвращаемый равный по размеру std::vector<int>, стек при вызове не испортится, просто в результате будет мусор.

Так что будьте осторожны!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.