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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章