我真的需要和初始化参考列表,但似乎不可能。复制的问题是我想要禁用复制构造,因为这些副本会在之后调用destrutor释放资源(并且不应该发生)。
我目前的(不好)替代方案是使用bool来跟踪它是否是复制构造的,因此资源不会被释放。
另一个替代方案是指针的初始化列表但是这使得它更加冗长,并且在我看来会接受nullptr以及在概念上不正确。
我真的很喜欢使用引用或其他类似的替代品(可能会移动?我似乎无法做到这一点)
答案 0 :(得分:1)
我假设您需要一个初始化列表,其中包含放入容器的引用引用。所以,你正在寻找一种参考类型,对吧?如果是这样,请检查参考包装。它允许引用作为容器的类型:
#include <iostream>
#include <functional>
struct A {
A() { std::cout << "A()" << std::endl; }
A(const A&) = delete;
~A() { std::cout << "~A()" << std::endl; }
};
int main(int argc, char const *argv[])
{
A a1;
A a2;
A a3;
{
// OK: don't call copy constructor during creation
std::initializer_list<std::reference_wrapper<A>> ilist{ a1, a2, a3 };
// OK: don't call destructor when "ilist" leaves the scope
}
{
// ERROR: can't create the list because copy constructor is deleted
std::initializer_list<A> va{ a1, a2, a3 };
}
// Destructors called here
return 0;
}