2016-08-23 18 views
0

У меня есть следующий код в проекте, и он дает мне ошибку C2059, синтаксическую ошибку «новый», что строка unique_ptr неверна.unique_ptr не может инициализировать

#include <memory> 

class Nothing { 
public: 
    Nothing() { }; 
}; 
class IWriter 
{ 
    public: 
     IWriter() { 
     } 

     ~IWriter() { 
     } 
    private: 
     std::unique_ptr<Nothing> test(new Nothing()); 
}; 

Что здесь происходит?

+0

Я не тестировался как 'тест (новый Nothing), и' Тест (новый Nothing ()); ' – SinisterMJ

+2

Вам нужно инициализировать его в конструкторе, а не в определении. – David

+1

@David Это возможно с C++ 11. –

ответ

4

Вы пытаетесь использовать default member initializer, но не в том направлении. Он должен быть просто инициализатором . (или равен инициализатору) (включен в декларацию участника).

Вы можете использовать list initialization (с C++ 11):

std::unique_ptr<Nothing> test{ new Nothing() }; 

Или member initialization list:

class IWriter 
{ 
    public: 
     IWriter() : test(new Nothing) { 
     } 
     ~IWriter() { 
     } 
    private: 
     std::unique_ptr<Nothing> test; 
}; 
+0

Инициализация списка работает только для C++ 11 + –

+3

'unique_ptr' является частью C++ 11 и далее, а C++ 11 - 5 лет. Как долго нам нужно писать «C++ 11 onwards»? – Tas

+0

Интересно, что инициализация списка не работала (VS2013), init в строительных работах – SinisterMJ