通过指针进行C++实例化

WAL*_*KER 0 c++ pointers class instantiation

这是我的代码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

结果,我没有看到任何打印出来的东西.我知道实际上并没有创建f1和f2.所以我想知道 我是否可以像这样实例化一个类?如果是,那怎么样?

Luc*_*ore 6

void createForm(form* f,int c){
    f = new Form(c);
}
Run Code Online (Sandbox Code Playgroud)

将创建一个对象并将其地址分配给本地f- 这是原始的副本f1并具有f2该功能的范围.

原始指针保持不变,因此以下cout<<语句会导致未定义的行为.

您尝试实现的目标可以通过引用传递指针来完成:

createForm(form*& f,int c)
Run Code Online (Sandbox Code Playgroud)

你也忘了打电话delete,所以现在你有内存泄漏.

更好的是 - 根本不使用指针.

  • 可以说,`form*createForm(int c){return new Form(c); 使用起来更直观:`form*f1 {createForm(1111)};`/`f2 = createForm(2222);`etc .. (2认同)

Mar*_*ila 5

您需要通过引用传递指针.

void createForm(form* &f,int c){
    f = new Form(c);
}
Run Code Online (Sandbox Code Playgroud)

但是,我宁愿将createForm函数更改为如下所示:

form* createForm(int c) {
   return new Form(c);
}
Run Code Online (Sandbox Code Playgroud)