あなたのオブジェクトへのポインタをVectorに追加したいので、スタックに割り当てられたオブジェクトが実際にあなたが探しているものではないと思います。 NathanOliverがすでに指摘したように
auto object = new Object{"someText"};
すると、あなたがstd::shared_ptr<>
を使用することを好む必要があります。より良いあなたはもう少しエレガントな構文を持つことができますnew
Object* object = new Object("someText");
// ....
addObj(object);
はC++ 11で始まると、ヒープ上に割り当てますまたはstd::unique_ptr<>
。どのオブジェクトが使用された後にオブジェクトを解放するかは、誰が責任を負うかによって決まります。
ベクトルクラスがすべてのオブジェクトを所有していて、ベクトルがそれ以上なくなるとすぐに削除する必要がある場合、ベクトルはになり、ユーザーは未処理のポインタにアクセスできるようになります。
void ClassA::addObj(unique_ptr<Object>&& o) { // take a rvalue-reference here
list.push_back(std::move(o)); // hand over ownership to the unique pointer in the list
}
Object* get(const size_t index) {
// please add some sanity checks here
return list.at(index).get(); // assuming, list actually ist a std::vector
}
ユーザーはどこにでもstd::shared_ptr<>
を使用し、それを維持するだろう長いベクトルよりも存続ベクトル、からオブジェクトへのポインタを維持することができるはず場合:
void ClassA::addObj(const shared_ptr<Object>& o) {
list.push_back(o);
}
shared_ptr<Object> get(const size_t index) {
// please add some sanity checks here
return list.at(index); // assuming, list actually ist a std::vector
}
もいることを、覚えておいてください独自のベクトル/リスト/マップなどを実装することは、教育プロジェクトとしてはうまくいきます。プロダクションコードでは、標準ライブラリに頼ることをお勧めします。あなたはおそらくそれを良くしません。