在不调用其构造函数的情况下创建对象



我在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时它会中断。

如果为对象创建浅拷贝是不够的,请声明自己的赋值运算符。如果浅拷贝没问题,则什么都不做,将为你创建一个隐式浅拷贝赋值运算符。

然后你可以做:

MyObject obj;
if(things) {
obj = MyObject(stuff);
}

最新更新