通过指针的c++实例化
C++ instantiation via pointer
下面是我的代码:
#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
——这是该函数作用域中原始f1
和f2
的副本。
原来的指针保持不变,所以下面的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);
}
相关文章:
- 从C++实例化QML
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 约束和显式模板实例化
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 对象实例化调用构造函数的次数太多
- 如何使用非默认构造函数实例化模板化类
- 静态数据成员模板专用化的实例化点在哪里
- 错误的cv::face FacemarkLBF实例化
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?
- 检查某些类型是否是模板类 std::optional 的实例化
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 模板化类构造函数的模板实例化
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 受约束的成员函数和显式模板实例化
- 对显式实例化的模板函数的未定义引用
- [temp.variadic]中关于包扩展实例化的措辞