我希望有一个指向我班级中对象的指针。为了避免为它做一个析构函数,我想使用std::unique_ptr
,因为在我的类中创建/拥有/破坏了对象,但是我有一个我无法理解的编译器错误。下一个代码将作为我的问题的简短示例:
std::unique_ptr<int> createPtr(int value)
{
std::unique_ptr<int> ptr(new int(value));
return ptr;
};
int main()
{
std::vector<std::unique_ptr<int>> vec;
vec.push_back(createPtr(1));
std::unique_ptr<int> ptr = createPtr(2);
vec.push_back(ptr);//error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
}
您能解释一下我为何会收到此错误以及std::unique_ptr
的正确用法吗?
答案 0 :(得分:14)
或者:
vec.push_back(std::move(ptr));
或者:
vec.emplace_back(createPtr(2));
答案 1 :(得分:3)
您有unique_ptr
:
std::unique_ptr<int> ptr = createPtr(2);
现在你把它的副本放在载体中:
vec.push_back(ptr);
现在您有两个unique_ptr
具有相同的值。如果这是允许的话,它将不是唯一的。