创建一个对象而不调用它的构造函数

时间:2018-01-26 17:23:10

标签: c++ oop object constructor

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

1 个答案:

答案 0 :(得分:1)

如果为对象创建浅拷贝是不够的,请声明自己的赋值运算符。如果浅拷贝是好的,那么什么都不做,并且会为你做一个隐含的浅拷贝赋值算子。

然后你可以这样做:

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