Я сталкиваюсь с ошибкой компилятора:
попытка ссылки на удаленную функцию
#include <iostream>
#include <vector>
template <typename T>
struct Container
{
Container() = default;
Container(const Container& other) = delete;
Container(T* ptr) : ptr(ptr) {}
T* ptr;
~Container() { delete ptr; }
};
struct Foo { Foo(int a, int b) {} };
int main()
{
std::vector<Container<Foo>> myvector;
myvector.push_back(new Foo(1, 2)); // I understand why this doesn't work.
myvector.emplace_back((new Foo(1, 2))); // I don't understand why this fails
}
Я понимаю, почему он говорит о попытке ссылаться на удаленный конструктор, когда я делаю std::vector::push_back()
, потому что это делает копию и требует вызова конструктора копирования, который я удалил.
Но std::vector::emplace_back()
должен принимать аргументы конструктора того типа, который он имеет. Когда я вернусь назад, я даю ему указатель на Foo
, и это должно быть перенаправлено в конструктор Container::Container(T* ptr)
.
Что мне не хватает?