2 zay999abc zay999abc 于 2015.06.19 18:35 提问

为什么会有这个错误?

图片说明
下面是可能发生错误的行截图:
图片说明
图片说明
下面是完整代码的复制,有兴趣可以看一下:
#include
#include
#include
using namespace std;
class strvec{
public:
strvec() :elements(nullptr), first_free(nullptr), cap(nullptr) { };
strvec(const strvec&);
strvec(strvec &&); //移动构造函数
strvec &operator=(const strvec&);
strvec &operator=(strvec &&); //移动赋值运算符
~strvec();
void push_back(const string&);
size_t size() const { return first_free - elements; }
size_t capacity() const { return cap - elements; }
string begin() const { return elements; }
string *end() const { return first_free; }
private:
static allocator alloc; //用来分配空间
void chk_n_alloc() { if (size() == capacity()) reallocate(); }; //保证空间充足
pair<string
, string*> alloc_n_copy(const string*, const string*); //分配内存,并拷贝一个给定范围的元素
void free();
void reallocate(); //分配新内存
string elements;
string *first_free;
string *cap;
};
void strvec::push_back(const string& s)
{
chk_n_alloc();
alloc.construct(first_free++, s);
}
pair<string
, string*> strvec::alloc_n_copy(const string *b, const string *e)
{
auto data = alloc.allocate(e - b);
return{ data, uninitialized_copy(b, e, data) };
}
void strvec::free()
{
if (elements)
{
for (auto p = first_free; p != elements;)
alloc.destroy(--p);
alloc.deallocate(elements, cap - elements);
}
}
strvec::strvec(const strvec &s)
{
auto newdata = alloc_n_copy(s.begin(), s.end());
elements = newdata.first;
first_free = cap = newdata.second;
}
strvec::strvec(strvec &&s)
{
auto first = alloc.allocate(s.end() - s.begin());
auto end = uninitialized_copy(make_move_iterator(s.begin()), make_move_iterator(s.end()), first);
elements = first;
first_free = cap = end;
}
strvec& strvec::operator=(const strvec &rhs)
{
auto newdata = alloc_n_copy(rhs.begin(), rhs.end());
free();
elements = newdata.first;
first_free = cap = newdata.second;
return *this;
}
strvec& strvec::operator=(strvec &&s)
{
if (this != &s)
{
free();
auto first = alloc.allocate(s.end() - s.begin());
auto end = uninitialized_copy(make_move_iterator(s.begin()), make_move_iterator(s.end()), first);
elements = first;
first_free = cap = end;
}
return *this;
}
void strvec::reallocate()
{
auto newcapacity = size() ? 2 * size() : 1;
auto newdata = alloc.allocate(newcapacity);
auto dest = newdata;
auto elem = elements;
for (size_t i = 0; i != size(); ++i)
alloc.construct(dest++, std::move(*elem++));
free();
elements = newdata;
first_free = dest;
cap = elements + newcapacity;
}
int main(void)
{
strvec s;
string temp;
while (cin >> temp)
{
s.push_back(temp);
cout << s.size() << endl;
}
}

1个回答

oyljerry
oyljerry   Ds   Rxr 2015.06.20 23:29

你的编译器支持移动构造语法吗

zay999abc
zay999abc 支持,用的是visual studio2013.析构函数没问题啊。。。
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
为什么会有这个blog
这个 blog 是伴随着 dotnet.csdn.net 一起成立。在这里 你可以了解到我们 dotnet.csdn.net 背后的点点滴滴。这里也将成为我们与你沟通的一个窗口。你可以在这里留下对dotnet.csdn.net各种意见和建议,我们都会认真地进行回复。你的每一点建议都是我们成长的最大动力,在这里,我们可以像朋友一样交流!期待你的到来。
为什么会有这个博客
渗透攻击超十年,由于年龄,身体原因,自己感觉快要退出一线渗透攻击了。遂打算把毕生所学用文字表写出来。因为文章涉及到敏感的攻击行为,所以好多需要打马赛克,或者是本地以demo的形式表现出来。当这个行业做久了,你也终有一天发现原来事物的本质是如此重要。比如内网渗透的本质是信息搜集。当年某大佬把这条经验传递给我,同样,今天变成老家伙的我,也希望把这条经验传递下去。 文中一定会出现笔误或者不对的地方
为什么会有这个微博
我的电脑中了宏病毒,要不是需要积分为了下载一个软件,我才...
为什么会有Diango这个项目
PS:最近由朋友问,为什么我那么对Django情有独钟,我很难说为什么,你可以看看下面这个解决,这是Django团队在解释为什么开发Django项目的一些理由,我对python感兴趣,是因为,他让我开始从系统上来思考WEB的应用,规划成了我最主要的工作,这个语言,扩展性是我最为看重的,还有他的快速开发,都是我所喜欢的,尝试了他的URL映射,我发现这是个好东西,以前开发网站从没往这项过,尝试了就忘不
Android出现65535的原因
深度剖析65535问题的产生原因
Class类的简单介绍
在java的帮助文档中,java.lang包中有一个Class类,注意这里的"C“是大写,所以这个不是表示类的声明,而是一个真正的类。在java的帮助文档中,这样定义的Class类: public final class Classextends Objectimplements Serializable, GenericDeclaration, Type, AnnotatedElement
【闲聊】关于为什么会有这个博客
老师说博客是一个学习的好地方也许我的某一条学习记录就是别人正在经历的希望我犯过的错误你们不会犯但当你们犯错的时候希望你们能从我的经历中获得参考是的,这个排版真是令人窒息这也许得成为我学习的第一步晚安。...
如何去掉打开EXCEL提示
调用API接口开发跨平台音视频应用 直接使用AnyChat 提供的API开发,上层应用需要处理回调函数、异步消息通知等流程,为了简化开发流程,可以使用我们提供的AnyChat SDK包装类(C++封装):CBRAnyChatSDKProc(位于:SDK\Include\BRAnyChatSDKProc.h),它将SDK的消息、回调封装到了一个类,上层应用只需要继承这个类,重载其中的一些方
为什么要有TIME_WAIT这个状态
1、实现TCP全双工连接的终止。
为什么会有java,为什么会有.net
<!--google_ad_client = "pub-1522224349364280";//300x250, 创建于 07-11-28google_ad_slot = "0317367049";google_ad_width = 300;google_ad_height = 250;//-->为什么会有java,为什么会有.net     有人说,j