#include <iostream>
#include <vector>
class MyClass {
public:
double& at(size_t index) { return data_[index]; }
double const& at(size_t index) const { return data_[index]; }
MyClass(size_t size) : data_(size) {}
~MyClass() { std::cout << "MyClass destroyed" << std::endl; }
private:
std::vector<double> data_;
};
const MyClass getMyClass() {
MyClass mc(3);
mc.at(0) = 3.0;
mc.at(1) = 4.0;
mc.at(2) = 5.0;
return mc;
}
int main() {
const double &value = getMyClass().at(0);
// Undefined behaviour, reference to element of vector that doesn't exist!
std::cout << value << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKY2xhc3MgTXlDbGFzcyB7CnB1YmxpYzogCiAgZG91YmxlJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGRhdGFfW2luZGV4XTsgfQogIGRvdWJsZSBjb25zdCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBkYXRhX1tpbmRleF07IH0KICBNeUNsYXNzKHNpemVfdCBzaXplKSA6IGRhdGFfKHNpemUpIHt9CiAgfk15Q2xhc3MoKSB7IHN0ZDo6Y291dCA8PCAiTXlDbGFzcyBkZXN0cm95ZWQiIDw8IHN0ZDo6ZW5kbDsgfQpwcml2YXRlOgogIHN0ZDo6dmVjdG9yPGRvdWJsZT4gZGF0YV87Cn07Cgpjb25zdCBNeUNsYXNzIGdldE15Q2xhc3MoKSB7CiAgTXlDbGFzcyBtYygzKTsKICBtYy5hdCgwKSA9IDMuMDsKICBtYy5hdCgxKSA9IDQuMDsKICBtYy5hdCgyKSA9IDUuMDsKICByZXR1cm4gbWM7Cn0KCmludCBtYWluKCkgewogIGNvbnN0IGRvdWJsZSAmdmFsdWUgPSBnZXRNeUNsYXNzKCkuYXQoMCk7CiAgCiAgLy8gVW5kZWZpbmVkIGJlaGF2aW91ciwgcmVmZXJlbmNlIHRvIGVsZW1lbnQgb2YgdmVjdG9yIHRoYXQgZG9lc24ndCBleGlzdCEKICBzdGQ6OmNvdXQgPDwgdmFsdWUgPDwgc3RkOjplbmRsOyAKfQ==