cga*_*gao 1 c++ shared-ptr visual-studio-2013
在此先感谢帮助的人们.我是C++的新手.我正在学习智能指针/共享指针的概念并使用Visual Studio 2013RC.按照维基百科中的示例,我创建了一个像这样的共享指针
SharedPointer.cpp
#include <iostream>
#include <memory>
//using namespace std;
void main(){
std::shared_ptr<int> sp1(new int(5), std::default_delete<int[]>());
//std::shared_ptr<int> sp2 = sp1;
for (int i = 0; i < 5; i++) sp1.get()[i]= i;
for (int i = 0; i < 5; i++) std::cout << sp1.get()[i] << std::endl;
system("pause");
}
Run Code Online (Sandbox Code Playgroud)
该程序编译并打印出0,1,2,3,4没有任何错误,但随后出现了"SharedPointer.exe触发断点"的窗口.
谁能告诉我这个例外的原因是什么?
非常感谢
你应该用int[5]而不是在int(5)这里:
std::shared_ptr<int> sp1(new int[5], std::default_delete<int[]>());
Run Code Online (Sandbox Code Playgroud)
目前,您的代码分配了一个int初始化为的单个5,然后它尝试将其作为五个数组int(未定义的行为)进行访问.之后,智能指针尝试int使用delete[]操作符(而不是"普通" delete操作符)删除它,这也是一个未定义的行为.