вектор emplace_back и shared_ptr в VS2012

0

У меня есть следующий код:

#include <vector>
#include <algorithm>
#include <memory>

struct monkey
{
    int mA, mB;

    monkey(int a, int b) : mA(a), mB(b)
    {
    }
};

typedef std::shared_ptr<std::vector<monkey>> MonkeyContainer;


int main()
{
    MonkeyContainer monkeyContainer;
    monkeyContainer->emplace_back(1, 2);
}

И он всегда emplace_back() на emplace_back(). Но он компилируется отлично, и я не вижу никакой проблемы. Почему он падает? Ниже приведено исключение и строка кода:

Unhandled exception at 0x00FE2299 in ConsoleApplication2.exe: 0xC0000005: Access violation reading location 0x00000008.

в

vector.h - line 894: _VARIADIC_EXPAND_0X(_VECTOR_EMPLACE, , , , )

Я использую VS2012 и пробовал как с ноябрьским CTP, так и с компилятором по умолчанию.

Я не могу использовать VS2013 atm из-за отсутствия поддержки поддержки и других факторов - есть ли исправление для MSVC11?

Теги:
c++11
shared-ptr
stl
visual-studio-2012

2 ответа

2
Лучший ответ

Вам нужно создать vector<monkey> который будет управляться shared_ptr.

MonkeyContainer monkeyContainer;

После вышеприведенного утверждения, что shared_ptr указывает на nullptr (monkeyContainer.get() == nullptr) и deferencing его назвать emplace_back результаты в аварии. Измените приведенную выше строку на

MonkeyContainer monkeyContainer = std::make_shared<std::vector<monkey>>();
  • 0
    ааа такой глупый надзор со мной, спасибо
1

Вы не инициализируете указатель MonkeyContainer. Это указывает на NULL когда вы пытаетесь emplace_back.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню