在C++中创建对象指针

Creating object pointers in C++

本文关键字:指针 创建对象 C++      更新时间:2023-10-16

我正在尝试创建一个对象,我想在开关盒中填充该对象,但这超出了我的知识范围。

我有这些构造函数:

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

所以,基本上我想调用以下方法,创建一个指向对象的指针,并将其填充在我的开关机箱中:

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

我认为我的构造函数是错误的,因为它并没有真正起作用。

我怎样才能做到这一点?

你不需要

指针。

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));
    ...
}

在此行中创建对象时

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);
}

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