gpt4 book ai didi

c++ - 构造不可复制对象的 "array"

转载 作者:可可西里 更新时间:2023-11-01 18:27:37 26 4
gpt4 key购买 nike

我有一个本质上不可复制的类(一个线程,所以没有有意义的复制语义),我想要一个大的“数组”,用非默认构造函数相同地构造。请注意,该数组是固定大小的。

我只能对 C++ 数组使用默认构造函数,除非我单独初始化每个数组。

Thread myArray[128];   // uses default constructor - wrong

我可以显式地列出对象的构造函数和参数,但那样冗长且难看

Thread myArray[128] = { Thread(params,...), Thread(params,...), ... x 128 ;  // ugly

我似乎不能使用 STL vector ,因为该对象是不可复制的 - 虽然 vector 永远不会改变大小。我猜构造函数实际上进行了复制!

std::vector<Thread> myVector(128, Thread(params,...));// won't compile

虽然我这样做的方式是使用一组智能指针和一个初始化循环,但也许我遗漏了一些东西:

是否有任何其他方式 - 也许使用 boost 容器,或不同的容器类型?

最佳答案

这可能看起来很疯狂(而且可能确实如此),但是......

struct ThreadInitValues{
// your actual params
int i;
float f;
};

struct Thread{
Thread(int i = _init.i, float f = _init.f)
: _i(i)
, _f(f)
{}

static ThreadInitValues _init;

private:
// uncopyable
Thread(Thread const&);
Thread& operator=(Thread const& other);

// your actual member
int _i;
float _f;
};

ThreadInitValues Thread::_init;

int main(){
Thread::_init.i = 5;
Thread::_init.f = 3.14f;
Thread arr[128];
}

也许这对你有用。 :) 当然,您现在需要注意数组是否在多线程代码中初始化...

关于c++ - 构造不可复制对象的 "array",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6042490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com