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编译器
请帮忙
您可以将指针直接传递给std::unique_ptrconstrutor:
test(T value)
: printValue(new printer<T>(value))
{ }
Run Code Online (Sandbox Code Playgroud)
或者你可以拨打reset上std::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)