std::make_unique in der Initialisierungsliste



  • Ich verstehe diese Fehlermeldung nicht und würde gerne wissen, was mir der Kompiler hier sagen möchte, warum darf ich hier nicht make_unique verwenden? - hier der Quellencode:

    #include <iostream>
    #include <memory>
    
    class Foo
    {
    	public:
    		Foo()
    			: bar(std::make_unique<int>(new int(12)))
    		{
    		}
    
    	private:
    		std::unique_ptr<int> bar;
    };
    
    int main()
    {
    	Foo();
    }
    

    Ich bekomme diese Fehlermeldung:

    In file included from /usr/include/c++/5.3.0/memory:81:0,
                     from main.cpp:2:
    /usr/include/c++/5.3.0/bits/unique_ptr.h: In instantiation of ‘typename std::_MakeUniq<_Tp>::__single_object std::make_unique(_Args&& ...) [with _Tp = int; _Args = {int*}; typename std::_MakeUniq<_Tp>::__single_object = std::unique_ptr<int>]’:
    main.cpp:8:43:   required from here
    /usr/include/c++/5.3.0/bits/unique_ptr.h:765:69: error: invalid conversion from ‘int*’ to ‘int’ [-fpermissive]
         { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); }
                                                                         ^
    


  • make_unique und new?



  • Ich bin so ein Depp, jetzt macht die Fehlermeldung auch Sinn, danke... 🙄


Log in to reply