C++ 如何将vector(或其他容器)与不可复制的类一起使用?

C++ 如何将vector(或其他容器)与不可复制的类一起使用?,c++,multithreading,stl,noncopyable,private-constructor,C++,Multithreading,Stl,Noncopyable,Private Constructor,我有以下代码: void f(){ ..... std::vector<PrepareLogFileThread> v; for(int i = 0; i < list.length(); ++i){ PrepareLogFileThread a( list[i], LOG_TEMPLATE); a.start(); v.push_back( a ); } ...

我有以下代码:

void f(){
  .....
  std::vector<PrepareLogFileThread> v;

  for(int i = 0; i < list.length(); ++i){

    PrepareLogFileThread a(  
                list[i],
                LOG_TEMPLATE);
    a.start();
    v.push_back( a );
  }
  ....
}
void f(){
.....
std::向量v;
对于(int i=0;i
PrepareLogFileThread
继承自使用
pthread
Thread
类(我们使用c++98标准…我可以使用
auto\u ptr

这里的问题是
线程
的复制构造函数是私有的,这样就不会扰乱执行或其他事情(我不是这个类的作者)

这里的想法是,我创建我的
PrepareLogFileThread
对象,
push_back
v
,启动它们,然后在
f
返回之前完成它们

PrepareLogFileThread
在析构函数中调用了
pthread\u join
,这样它就完成了

但是我不能,因为我复制
a
是按照
push_-back
进行的

如果没有c++11和更改
线程
的复制构造函数,我怎么做呢


我使用的是GCC4.4.6,我可以使用
auto_ptr

您可以存储指向对象的指针

std::vector<PrepareLogFileThread*> v;  
std::vector v;

您应该注意对象的生命周期。

标准容器假定其元素支持值语义(用您的说法,其中包括“可复制”等)

一种选择是创建自己的容器,它不需要这样的语义。由于各种原因,这很难做到

或者,让容器元素具有值语义,其中值唯一标识
PrepareLogFileThread
类的实例。对于这样的“某物”,一个明显的选择是指针。比如,

void f()
{
    std::vector<PrepareLogFileThread *> v;

    for(int i = 0; i < list.length(); ++i){

    PrepareLogFileThread *a = new PrepareLogFileThread(  
                list[i],
                LOG_TEMPLATE);
    a->start();
    v.push_back( a );
  }
}
void f()
{
std::向量v;
对于(int i=0;istart();
v、 推回(a);
}
}
但是,请记住,必须在向量
v
停止存在之前删除其元素-使用操作符
new
创建的对象在完成后不会自动销毁。否则将导致内存泄漏


还请注意,
std::auto_ptr
不支持值语义,因此不应存储在标准容器中。

您需要自己的容器,它不需要可复制的类型,并允许像C++11容器一样就地构造(“安放”)。或者可能添加一级间接寻址,并将指针存储到动态对象(由于您没有任何合适的智能指针,请根据需要小心地删除它们)。如果你真的陷入了过去,也许会有所帮助。