VS C2541问题 delete

问题描述

error C2541: “delete”: 不能删除不是指针的对象

源自<<C++ Primer>> 练习12.19。出现问题的代码如下:

class StrBlob
{
public:
	friend class StrBlobPtr;
	using size_type = vector<string>::size_type;
	StrBlobPtr begin();
	StrBlobPtr end();
	// Problem here
	StrBlob() :data(make_shared<vector<string>>) {}
	size_type size() const { return data->size(); }
	bool empty() const { return data->empty(); }
	void push_back(const string &s) { data->push_back(s); }
}

正常看代码是很难看出来问题在哪里的,我是检查了好多遍也没有发现问题在哪里。其实问题就在第一个构造函数中的make_shared<vector< string>>,是需要添加括号进行值初始化的:make_shared<vector< string>>()

出于与变量初始化相同的原因,对动态分配的对象进行初始化通常是个好主意。

问题定位

  • 主要是有两方面原因:
    • VS的编译环境不熟悉,error explain是从底层开始,之前用过的编译器是从顶层开始。
    • 对于make_shared构造对象初始化不熟悉。
发布了3 篇原创文章 · 获赞 21 · 访问量 5044
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章