6

コピーできない要素でSTLコンテナを使用する方法はありますか?

このようなもの:

class noncopyable
{
    noncopyable(noncopyable&);
    const noncopyable& operator=(noncopyable&);
public:
    noncopyable(){};
};

int main()
{
    list<noncopyable> MyList; //error C2248: 'noncopyable::noncopyable' : cannot access private member declared in class 'noncopyable'
}
4

3 に答える 3

16

いいえ、コピーできない要素をC++コンテナクラスに含めることはできません。

標準の23.1段落3によると、「これらのコンポーネントに格納されるオブジェクトのタイプは、タイプの要件CopyConstructible(20.1.3)、およびAssignableタイプの追加要件を満たしている必要があります。」

于 2009-09-17T17:49:08.137 に答える
15

1つのオプションは、要素へのポインターのリスト(できればshared_ptr)を作成することです。これはあなたが望むものではありませんが、それは仕事を成し遂げます。

于 2009-09-17T17:43:27.007 に答える
2

もう1つのオプションは、BoostPointerContainerライブラリを使用することです。これは、std :: auto_ptrsの標準コンテナのように機能しますが、そのようなことが可能でした。要素の排他的所有権を保持し、コピーすることはできません。また、shared_ptrsの標準コンテナよりもオーバーヘッドが少なくなります。

于 2009-09-18T11:47:05.407 に答える