言語: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されるのでしょうか?
vectorにnewでポインタを格納した場合について
Re: vectorにnewでポインタを格納した場合について
newで確保された領域はdeleteされません。
↓のようなテストプログラムで動作を確認してみてください。
start testとend testの間でMyclassのデストラクタが呼ばれていないことが分かると思います。
↓のようなテストプログラムで動作を確認してみてください。
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;
}