c++ - 我可以使用 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
在没有构造函数参数的情况下为类分配内存?我可以
malloc()
用于分配和delete
解除分配或new
分配和free()
解除分配吗?没有构造函数如何调用析构函数?
解决方案
我可以使用 malloc 为对象分配内存吗?
是的,您可以分配内存,malloc
然后该内存可以用于存储对象。
但是,让我们重新表述一下:
我可以使用创建类对象
malloc
吗?
不。
您的程序具有未定义的行为,因为您从未创建过 object。
相反,对 C++ 类对象使用new
/ delete
(或智能指针),或者只是以正常方式声明它们。
malloc 如何在没有构造函数参数的情况下为类分配内存?
正是这样。它分配内存,但实际上并未ex
在该内存中构造任何对象。
如果您真的需要,您现在可以使用新位置来执行此操作。
我可以使用 malloc() 进行分配,使用 delete 进行解除分配,或者使用 new 进行分配,使用 free() 进行解除分配吗?
不。
没有构造函数如何调用析构函数?
没有有意义的方法来回答这个问题,因为您的程序具有未定义的行为。
推荐阅读
- mysql - 将 SQL 查询转换为 MYSQL
- c# - 这些 linq 查询中哪一个性能更高?
- arrays - 如何添加额外的零数组
- angular - 用于 Angular 开发的 NGINX 代理服务器
- render - 如何从 Google 地球工作室 ESP 文件和图像生成电影
- sql - 显示先进先出的 SQL 查询
- visual-studio - itk Hessian3DToVesselnessMeasureImageFilter ,使用 SetAlpha
- r - 从 excel 导入时不显示 NA 值
- css - 具有重复的多个背景图像
- vue.js - 将 v-model 添加到嵌套 v-for 循环中的输入