我在SO上看到的一些问题涉及到这个问题,但我似乎有一个独特的问题。
我正在尝试创建一个对象,然后在我的代码中的其他位置进行初始化,并在完成之后调用构造函数。为此,我正在创建一个指向对象实例的智能指针,然后重置它:
#include "relevantHeaders.h"
using namespace std;
int main(int argc, char *argv[])
{
std::unique_ptr<MyObject> obj;
if(someCondition){
// Do stuff
obj.reset(new MyObject(stuff));
}
doOtherStuff(obj);
}
我需要这样做的原因是因为obj
继续在我调用构造函数的条件之后使用 - 如果我在条件下在正常调用中创建对象,然后它会超出范围。
首先,经过一些研究,在我看来这是最好的方法。想法?
其次,我在编译时收到此错误:
The text ">" is unexpected. It may be that this token was intended as
a template argument list terminator but the name is not known to be a
template
这是什么意思?
编辑:由于每个人都非常关注relevantHeaders.h
,让我这样说......以下(伪)代码完全可以正常运行:
#include "relevantHeaders.h"
using namespace std;
int main(int argc, char *argv[])
{
MyObject obj;
if(someCondition){
// Do stuff
// obj.reset(new MyObject(stuff));
}
doOtherStuff(obj);
}
也就是说,我可以使用MyObject
就好了。我添加std
实用程序unique_ptr
时会中断。
答案 0 :(得分:1)
如果为对象创建浅拷贝是不够的,请声明自己的赋值运算符。如果浅拷贝是好的,那么什么都不做,并且会为你做一个隐含的浅拷贝赋值算子。
然后你可以这样做:
MyObject obj;
if(things) {
obj = MyObject(stuff);
}