#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>, стек при вызове не испортится, просто в результате будет мусор.
Здравствуйте, Aleх, Вы писали:
A>В данном случае испортится стек при вызове функции foo. Если в классе Class у функции foo сделать возвращаемый равный по размеру std::vector<int>, стек при вызове не испортится, просто в результате будет мусор.
Стек тут не при чем, оно не должно компилироваться.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[2]: [msvc2013 bug] virtual funtions return type
Здравствуйте, Ops, Вы писали:
Ops>Здравствуйте, Aleх, Вы писали:
A>>В данном случае испортится стек при вызове функции foo. Если в классе Class у функции foo сделать возвращаемый равный по размеру std::vector<int>, стек при вызове не испортится, просто в результате будет мусор.
Ops>Стек тут не при чем, оно не должно компилироваться.
Про стек я написал потому, что если он испортится, то в работающей программе можно сразу увидеть ошибку, которую пропустил компилятор. Если же неправильные данные приедут, то программа упадет чуть позже.