c ++ - 如何使用裸新的初始化智能点?

cip*_*anr 2 c++ visual-c++ c++11

我正在尝试学习新的c ++标准,但是在使用智能指针时,我的工作时间很短.这是我正在编写的程序的代码,它不想工作:

#include <iostream>
#include <memory>

template <typename T> class printer
{
public:
    printer(T val)
    {
       value = val;
    }

    void printvalue()
    {
        std::cout << "The value is " << val;
        std::cin.get();
    }


 private:
    T value;
 };

template <typename T> class test
{
public:
    test(T value)
    {
            printer<T> * test = new printer<T>(value);
            *printValue = test;
    }

    void beginTest()
    {
            printValue.get()->printvalue();
    }

private:
    std::unique_ptr<printer<T>> printValue;
};
Run Code Online (Sandbox Code Playgroud)

我写了这样的主函数:

int main()
{
    test<int> t(5);
    t.beginTest();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我压缩之后,我得到以下错误:binary'=':找不到运算符,它采用'printer*'类型的右手操作数(或者没有可接受的转换)

这是指这行代码:*printValue = test;

我认为即使在这种情况下也可以使用new,不管我认为我可以超载运算符,但我确信有一些我缺少的东西

注意:我使用的是visual studio 2013编译器

请帮忙

Jos*_*eld 6

您可以将指针直接传递给std::unique_ptrconstrutor:

test(T value)
  : printValue(new printer<T>(value))
{ }
Run Code Online (Sandbox Code Playgroud)

或者你可以拨打resetstd::unique_ptr:

test(T value)
{
    printValue.reset(new printer<T>(value));
}
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要使用get()访问unique_ptr点的对象- 您可以像对待普通指针一样对待它:

printValue->printvalue();
Run Code Online (Sandbox Code Playgroud)