是否可以使用 malloc 为类对象分配内存?
Can I allocate memory for class objects using malloc?
请参阅以下代码:
#include<iostream>
#include<stdlib.h>
using namespace std;
class ex
{
int i;
public:
ex(int x){
i=x;
cout<<"nconstructor";
}
void setval(int x)
{
i=x;
}
int geti(){return i;}
~ex()
{
cout<<"ndestructor";
}
};
int main()
{
ex *ob;
ob=(ex*) malloc(sizeof(ex));
ob->setval(5);
cout<<ob->geti();
delete ob;
}
我以为上面的代码会显示错误,但它编译成功并显示输出
5
destructor
Process returned 0 (0x0) execution time : 0.270 s
我的问题是:
我可以使用
malloc
为对象分配内存吗?如何在没有构造函数参数的情况下为类分配内存
malloc
?
是否可以使用或者
new
用于分配,free()
用于解除分配?如何在没有构造函数的情况下调用析构函数?
malloc()
进行分配,delete
用于解除分配,我可以使用 malloc 为对象分配内存吗?
是的,您可以使用malloc
分配内存,并且该内存以后可用于存储对象。
但是,让我们稍微改写一下:
我可以使用
malloc
创建类对象吗?
不。
程序具有未定义的行为,因为您从未创建过对象。
相反,使用new
/delete
(或智能指针(来C++类对象,或者只是以正常方式声明它们。
malloc 如何在没有构造函数参数的情况下为类分配内存?
正是如此。它分配内存,但实际上并不在该内存中构造任何ex
对象。
如果您确实需要,您现在可以使用new 展示位置来执行此操作。
我可以使用 malloc(( 进行分配和删除以进行解除分配,或者使用 new 用于分配和 free(( 进行释放吗?
不。
如何在没有构造函数的情况下调用析构函数?
没有有意义的方法来回答这个问题,因为您的程序具有未定义的行为。
1(我可以使用 malloc 为对象分配内存吗
?
确定。但是 malloc 不会创建任何对象。可以使用新表达式创建具有动态存储的对象。放置-new 可用于将对象创建到使用 malloc 分配的内存中。
2(malloc 如何在没有构造函数参数的情况下为类分配内存?
除了内存量(以及内存的可能对齐(之外,为一种类型或另一种类型分配内存之间没有区别。
3(我可以使用malloc((进行分配,删除用于释放或新建进行分配,free((进行释放吗?
仅当您不介意程序具有未定义的行为时。你应该介意。Free 只能与来自 malloc(或 realloc、strdup 等(的指针一起使用。删除只能与来自 new 的指针一起使用。delete[] 只能与来自 new[] 的指针一起使用。
4(如何在没有构造函数的情况下调用析构函数?
构造函数对是否调用析构函数没有影响。销毁对象时调用析构函数。delete
会破坏尖锐的物体。如果没有对象,则程序的行为是未定义的。您的程序就是这种情况。行为也是未定义的,因为指针不是新的结果,而是malloc的结果。还因为成员函数是通过指向不存在对象的指针调用的。
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 为对象分配整数.输出将是什么?
- C++ 使用枚举类对象分配 std::map 值
- 如何在C++中为增加但记住删除先前对象的对象分配唯一标识符
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 有没有办法在同名类 (c++) 中为对象分配一个指针变量
- 如何使用函数(而不是构造函数)将派生类对象分配给基类指针
- 是否可以使用 malloc 为类对象分配内存?
- 将对象分配给数组C++
- 我们可以在cpp中为对象分配函数吗
- 为模板参数类型中的新对象分配内存
- 我无法将对象分配给对象数组
- 对象分配-成员函数的使用无效错误
- 将派生对象分配给函数内的基类指针
- Arduino ESP32如何将BLEUUID对象分配到字符串中
- Rapidjson将密钥值从一个文档对象分配到另一个文档对象
- 奇怪的对象分配行为C