用C ++创建对象指针

时间:2012-05-25 18:36:55

标签: c++

我试图创建一个我希望在switch-case中填充的对象,但它超出了我的知识范围。

我有这些构造函数:

cObj::cObj()
{
}

cObj::cObj(std::string filename)
{
    //...
}

所以,基本上我想调用以下方法,创建一个指向该对象的指针,并在我的switch-case中填充它:

void someThing() {
    cObj myObj();

    switch (someValue)
        case 0:
            myObj("/some/path");
            break;
        ...
}

我认为我的构造函数是错误的,因为它不起作用。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:4)

您不需要指针。

void someThing() {
    cObj myObj; // Don't use parentheses for the default constructor.
                // What you had was a function declaration, not an object creation.

    switch (someValue) {
        case 0:
            myObj = cObj("/some/path");
            break;
        ...
}

如果您没有默认构造函数,或者您不希望它被调用,那么您可以使用指针,最好是智能:

void someThing() {
    std::unique_ptr<cObj> myObj;

    switch (someValue) {
        case 0:
            myObj.reset(new cObj("/some/path"));
            break;
        ...
}

或者,正如lmmilewski暗示的那样,你可以将决定分解为函数,然后返回对象:

cObj choose(someType someValue) {
    switch (someValue) {
        case 0:
            return cObj("/some/path");
        ...
}

void someThing() {
    cObj myObj(choose(someValue));
    ...
}

答案 1 :(得分:3)

在此行中创建对象时

cObj myObj();

(顺便说一句。你可能不想要这些括号。你想创建一个对象,而不是声明一个函数。)

你调用构造函数。你不能在switch语句中再次调用它。 您可以创建一个单独的方法:

cObj::cObj()
{
}

void cObj::SetFilename(const std::string& filename) {
// ...
}

并使用它:

void someThing() {
    cObj myObj;

    switch (someValue)
        case 0:
            myObj.SetFilename("/some/path");
            break;
        ...
}

我不确定你要做什么,但也许更好的方法是首先确定文件路径是什么然后创建对象?

void someThing() {
    std::string filepath = "default/path";

    switch (someValue)
        case 0:
            filepath = "some/path";
            break;
        ...

    cObj myObj(flepath);
}

您还可以创建一个函数来决定使用哪个路径并返回对象: