Требуется ли std :: unique_ptr , чтобы знать полное определение T?

У меня есть код в заголовке, который выглядит следующим образом:

#include <memory>

class Thing;

class MyClass
{
    std::unique_ptr< Thing > my_thing;
};

Если я включаю этот заголовок в cpp, который не включает Thing ], то это не будет компилироваться под VS2010-SP1:

1> C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ include \ memory (2067): ошибка C2027: использование неопределенного типа 'Thing'

Замените std :: unique_ptr на std :: shared_ptr , и он компилируется.

Итак, я предполагаю, что это текущая реализация VS2010 std :: unique_ptr , которая требует полного определения и полностью зависит от реализации.

Или нет? Есть ли в его стандартных требованиях что-то такое, что делает невозможным для реализации std :: unique_ptr работать только с предварительным объявлением? Это кажется странным, ведь он должен содержать только указатель на Thing , не так ли?

236
задан JasonMArcher 11 September 2014 в 13:43
поделиться