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.所以我想知道 我是否可以像这样实例化一个类?如果是,那怎么样?
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,所以现在你有内存泄漏.
更好的是 - 根本不使用指针.
您需要通过引用传递指针.
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)
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |