ページ 11

vectorにnewでポインタを格納した場合について

Posted: 2015年10月01日(木) 21:40
by test
言語:C++
環境:Visual Studio Express 2013 for Windows Desktop

以下のように、vectorにnewでポインタを格納した場合について質問です。
[code c++]
vector<Myclass*> vec;
vec.push_back(new Myclass);
[/code]
※ Myclassは自作クラス


この場合、
[code c++]
vec.erase(0);
vec.clear();
[/code]
などで要素を削除したとき、格納されているポインタはdeleteされるのでしょうか?

Re: vectorにnewでポインタを格納した場合について

Posted: 2015年10月01日(木) 23:39
by Poco
newで確保された領域はdeleteされません。
↓のようなテストプログラムで動作を確認してみてください。
start testとend testの間でMyclassのデストラクタが呼ばれていないことが分かると思います。

コード:

#include <vector>
#include <iostream>

class Myclass {
public:
	~Myclass() {
		std::cout << "owari" << std::endl;
	}
};

int main() {
	std::vector<Myclass*> vec;
	Myclass * p = new Myclass;

	vec.push_back(p);

	std::cout << "start test" << std::endl;

	vec.erase(vec.begin());
	vec.clear();

	std::cout << "end test" << std::endl;
	
	delete p;
}