これはスマートポインタの古典的なシナリオです。任意のスマートポインタ。
最も簡単な選択ははstdされるだろう
:: unique_ptrを:
Live On Coliru
#include <boost/circular_buffer.hpp>
#include <iostream>
struct MyObject {
MyObject(int i) : _i(i) { std::cout << __FUNCTION__ << " _i=" << _i << "\n"; }
~MyObject() { std::cout << __FUNCTION__ << " _i=" << _i << "\n"; }
int _i;
};
int main() {
using Ptr = std::unique_ptr<MyObject>;
boost::circular_buffer<Ptr> cBuf(5);
cBuf.push_back(std::make_unique<MyObject>(0)); // cBuf[0]
cBuf.push_back(std::make_unique<MyObject>(1)); // cBuf[1]
cBuf.push_back(std::make_unique<MyObject>(2)); // cBuf[2]
cBuf.push_back(std::make_unique<MyObject>(3)); // cBuf[3]
cBuf.push_back(std::make_unique<MyObject>(4)); // cBuf[4]
std::cout << "Full, pushing extra\n";
cBuf.push_back(std::make_unique<MyObject>(5)); // this will overwrite position 0
std::cout << "Done\n";
}
プリント:
MyObject::MyObject _i=0
MyObject::MyObject _i=1
MyObject::MyObject _i=2
MyObject::MyObject _i=3
MyObject::MyObject _i=4
Full, pushing extra
MyObject::MyObject _i=5
MyObject::~MyObject _i=0
Done
MyObject::~MyObject _i=1
MyObject::~MyObject _i=2
MyObject::~MyObject _i=3
MyObject::~MyObject _i=4
MyObject::~MyObject _i=5
私はここ石器時代でこだわっているとだけすることができますC++ 11の仕様を持たないgcc 4.4.7を使用し、 'std :: make_unique'を持たないので、スマートポインタはありません – mike
コメントに重要な情報を追加するのではなく、質問を編集できます。 – sehe