通过指针的c++实例化

C++ instantiation via pointer

本文关键字:c++ 实例化 指针      更新时间:2023-10-16

下面是我的代码:

#include <iostream>
using namespace std;
class form{
public:
    form(int c ){
        code = c;
    }
    int code;
};
void createForm(form* f,int c){
    f = new Form(c);
}
int main(){
    form* f1;
    form* f2;
    createForm(f1,1111);
    createForm(f2,2222);
    cout<<f1->code<<endl;
    cout<<f2->code<<endl;
    return 0;
}

结果,我没有看到任何打印出来的东西。我知道f1 &F2实际上并不是创建的。所以我想知道如果我能像这样实例化一个类?

void createForm(form* f,int c){
    f = new Form(c);
}

将创建一个对象,并将其地址分配给本地f——这是该函数作用域中原始f1f2的副本。

原来的指针保持不变,所以下面的cout<<语句会导致未定义的行为。

你想要达到的目的可以通过引用传递指针来实现:

createForm(form*& f,int c)

您还忘记调用delete,所以现在您有内存泄漏。

最好不要使用指针

需要通过引用传递指针。

void createForm(form* &f,int c){
    f = new Form(c);
}

然而,我宁愿改变createForm函数看起来像这样:

form* createForm(int c) {
   return new Form(c);
}