问一个关于c++的问题
2015-01-04 18:51
399 查看
#include<iostream>
#include<string>
#include<vector>
#include<boost\shared_ptr.hpp>
using namespace std;
class strblodptr
{
public:
strblodptr():curr(0){}
strblodptr(weak_ptr<vector<string>>v,size_t t=0):wptr(v),curr(t){}
string&deref()const;
strblodptr&incr();
private:
size_t curr;
shared_ptr<vector<string>>check(size_t,const string&)const;
weak_ptr<vector<string>>wptr;
};
shared_ptr<vector<string>>strblodptr::check(size_t t,const string& str)const
{
auto ref=wptr.lock();
if(!ref)throw runtime_error("111111111111111111");
if(t>=ref->size())throw out_of_range(str);
return ref;
}
string&strblodptr::deref()const
{
auto p=check(curr,"dereference past end");
return (*p)[curr];
}
strblodptr&strblodptr::incr()
{
check(curr,"increment past end of strblodptr");
++curr;
return *this;
}
void main()
{
string strs[]={"My","name","is","cc"};
vector<string>v(strs,strs+4);
vector<string>*vp=new vector<string>();
*vp=v;
shared_ptr<vector<string>>sp(vp);
weak_ptr<vector<string>>wp(sp);
strblodptr ss(wp,3);
cout<<ss.deref()<<endl;
ss=ss.incr();
cout<<ss.deref()<<endl;
delete vp;
}
为什么编译器说out of range at memory?我有delete了啊,还有,要正常运行如何改?
#include<string>
#include<vector>
#include<boost\shared_ptr.hpp>
using namespace std;
class strblodptr
{
public:
strblodptr():curr(0){}
strblodptr(weak_ptr<vector<string>>v,size_t t=0):wptr(v),curr(t){}
string&deref()const;
strblodptr&incr();
private:
size_t curr;
shared_ptr<vector<string>>check(size_t,const string&)const;
weak_ptr<vector<string>>wptr;
};
shared_ptr<vector<string>>strblodptr::check(size_t t,const string& str)const
{
auto ref=wptr.lock();
if(!ref)throw runtime_error("111111111111111111");
if(t>=ref->size())throw out_of_range(str);
return ref;
}
string&strblodptr::deref()const
{
auto p=check(curr,"dereference past end");
return (*p)[curr];
}
strblodptr&strblodptr::incr()
{
check(curr,"increment past end of strblodptr");
++curr;
return *this;
}
void main()
{
string strs[]={"My","name","is","cc"};
vector<string>v(strs,strs+4);
vector<string>*vp=new vector<string>();
*vp=v;
shared_ptr<vector<string>>sp(vp);
weak_ptr<vector<string>>wp(sp);
strblodptr ss(wp,3);
cout<<ss.deref()<<endl;
ss=ss.incr();
cout<<ss.deref()<<endl;
delete vp;
}
为什么编译器说out of range at memory?我有delete了啊,还有,要正常运行如何改?
相关文章推荐
- 关于c++字符串的一个问题
- 关于C++私有承继的一个问题
- c++的getline一个关于缓冲区的一个小问题
- 一个C++关于类使用的问题!
- C++学习中关于cout遇到的一个小问题
- 关于C++中子类调用父类方法的一个问题
- 关于c++中的一个母牛生小牛的问题详细解答与体会
- 关于C++指针的一个问题
- 关于c和c++中的eof函数多读一个问题
- 一个关于c++字符串处理和delete[]与delete差别的问题
- C++关于参数为const引用类型的函数调用参数成员函数的一个问题
- C++关于动态申请空间的一个问题
- 关于c++名字解析的一个问题:名字空间污染
- 关于sublime 编译C与gc++编译C的一个问题
- C++中一个关于复制构造函数和指针的问题
- C++ 一个关于返回参数的问题
- 关于“C++ vs2010中声明一个类的函数,提示不兼容”问题
- 关于c++中原型模式的一个问题,请告诉进来帮忙指点一下
- 关于rand()的函数: 请问一个关于C++的问题...
- 关于解决c++的一个古怪问题(转)