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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
test

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

#1

投稿記事 by test » 8年前

言語: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されるのでしょうか?

Poco
記事: 161
登録日時: 13年前

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

#2

投稿記事 by Poco » 8年前

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;
}

閉鎖

“C言語何でも質問掲示板” へ戻る