メモリストレージはコピーできないよん

久しぶりにSURF特徴量解析を実装。ちなみにOpenCV1.1の話。
複数の画像を解析したい場合、関連オブジェクトをまとめてクラス化してコンテナに格納したくなる。
で、以下のようなクラスをぱっと組んでみた。

#include "cv.h"
#include "cxcore.h"
#include
#include

class CSURFAnalyzer {
public:
// コンストラクタ.
CSURFAnalyzer();
// デストラクタ.
~CSURFAnalyzer();
// コピーコンストラクタ.
// コンテナにプッシュするので必要.
CSURFAnalyzer(const CSURFAnalyzer& obj);
// 解析インターフェース.
..
..
protected:
CvMemStorage* m_storage;
CvSeq* m_keypoints;
CvSeq* m_descriptors;
..
..
};

typedef std::vector SURFAnalyzerList;

ところがコピーコンストラクタを実装していて気づいた。メモリストレージってコピーができない。
解説@opencv.jpをみるとCvMemStorageの中身が以下のようになっている。

typedef struct CvMemStorage
{
struct CvMemBlock* bottom;/* 最初に確保されたブロック */
struct CvMemBlock* top; /* 現在のメモリブロック − スタックの先頭 */
struct CvMemStorage* parent; /* 新たなブロックを確保する場所 */
int block_size; /* ブロックサイズ */
int free_space; /* top ブロック内の利用可能領域サイズ(バイト単位) */
} CvMemStorage;

typedef struct CvMemBlock
{
struct CvMemBlock* prev;
struct CvMemBlock* next;
} CvMemBlock;

再帰的に自らの構造体のポインタを持っている!動的に拡張可能ってのはこういう意味か。
cvMemStorageAlloc()とmemcpy()を使って地道に実装するのか?これを安全にコピーするよう実装するのは厄介。
メモリストレージを別に管理するよう設計する必要がでてきました。