VS C2541问题 delete

问题描述

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

源自<> 练习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>,是需要添加括号进行值初始化的:make_shared>()

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

问题定位

  • 主要是有两方面原因:
    • VS的编译环境不熟悉,error explain是从底层开始,之前用过的编译器是从顶层开始。
    • 对于make_shared构造对象初始化不熟悉。

你可能感兴趣的:(C++,Primer)