我找到了这段代码,但我不知道为什么它运行平稳。我认为索引i = 3
上应该存在一个运行时错误,在该错误中我们访问未分配的内存。
我检查了一些其他类似的问题,例如Why does this code compile without warnings?。
class X {
public:
X(int x) {
cout << x - 1;
}
};
template <class T, int d = 3>
class Container {
T* arr;
public:
Container():arr(new T[d]){}
void setItemAtindex(T item, int ind){
arr[ind] = item;
}
X getitematindex(int ind){
return arr[ind];
}
};
int main() {
Container<int> container;
for(int i = 1; i < 4; i++){
container.setItemAtindex(i, i);
X x = container.getitematindex(i);
}
/* int* array = new int[3];
array[3] = 4;
cout << array[3];*/
return 0;
}
程序运行正常并输出012。
让我烦恼的是,/**/
中的代码在打印0124
(添加了array[3] = 4
之后发出了异常,而容器和此数组都与我非常相似。 / p>
感谢您的帮助!