好的,这里有2个简单的C ++示例,第一个是:
class MyClass
{
private:
int test;
public:
int member(){
test = 456;
return 1;
} // one public function
};
int funct(MyClass** obj)
{
*obj = new MyClass();
int c = (**obj).member();
return 1;
}
...
MyClass* object;
int i = funct(&object);
...
而在第二种情况下,我将主要修改如下:
MyClass** object = (MyClass **)malloc(sizeof(MyClass));
int i = fun(object);
两个示例都可以正常工作,但是我不确定我是否正确理解了为什么仅在第二种情况下才需要malloc(否则它将根本无法编译)。
在此先感谢您的帮助
PS:我知道双指针是更C风格的编程,但我目前正在尝试使用两种语言。
MyClass** object = (MyClass **)malloc(sizeof(MyClass));
实际上这是错误的,malloc
将返回指向已分配内存的指针:MyClass *
,所以如果您以后做:*object
并且想看到指向MyClass
您的指针将是错误的。您应该宁愿:
MyClass* pobject = (MyClass *)malloc(sizeof(MyClass));
MyClass** ppobject = &pobject ;
您的问题对我来说尚不清楚-抱歉,用malloc分配clase也不明智-您的问题看起来像是POD-这样看来是安全的,但我将使用std :: is_pod进行检查。
[编辑]
工作示例如下。您问为什么object
在第二种情况下需要初始化,那就是因为在第一种情况下,您只需定义指针变量:即可为指针保留存储空间MyClass* object;
。在这里object
可以安全使用funct
。在第二个示例中,您没有为指向MyClass的指针保留的内存(在这种情况下为堆栈空间),因此必须使用malloc或new分配它。希望这足够清楚。
MyClass** object = (MyClass **)malloc(sizeof(MyClass*));
//MyClass** object = new MyClass*;
int i = funct(object);
delete *object;
free(object);
//delete object;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句