理解C ++中双指针和单指针内存分配之间的区别的问题

雷科奇

好的,这里有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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

理解c中的内存分配和指针

来自分类Dev

将单指针和双指针传递给C中的函数

来自分类Dev

理解 C 中的指针

来自分类Dev

C中普通指针和const指针之间的区别

来自分类Dev

单指针和双指针数组之间的区别

来自分类Dev

C中的指针分配之间有什么区别?

来自分类Dev

理解指针在 C 中的用法

来自分类Dev

C ++使用理解指针

来自分类Dev

c ++使用理解指针

来自分类Dev

理解c函数指针

来自分类Dev

单指针和双指针附加的区别

来自分类Dev

为结构C ++中的指针分配和删除内存

来自分类Dev

为结构C ++中的指针分配和删除内存

来自分类Dev

C和C ++中的函数指针转换之间的区别

来自分类Dev

C和C ++中的void指针之间的区别

来自分类Dev

C#和C中的指针之间的区别

来自分类Dev

在理解和使用双指针时遇到问题

来自分类Dev

RAII和C ++中的智能指针之间的区别

来自分类Dev

就内存分配而言,C ++指针和指针身份

来自分类Dev

C语言中“ *”,“ *”和“ *”指针之间的区别

来自分类Dev

C中常量指针和常量指针之间的区别

来自分类Dev

在C中以整数和单个字符分配值时,如何理解指针?

来自分类Dev

C:用双指针重新分配问题

来自分类Dev

难以理解Objective-C中的指针

来自分类Dev

无法理解C中的Null指针

来自分类Dev

理解 C 中声明的数组的指针算术

来自分类Dev

用C中的结构和指针理解变量

来自分类Dev

将双指针传递给 C 和 C++ 中的函数的区别

来自分类Dev

C中结构成员(指针与数组)的内存分配之间的差异