首页 > 解决方案 > 我可以使用 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

我的问题是:

  1. 我可以使用 为对象分配内存malloc吗?

  2. 如何malloc在没有构造函数参数的情况下为类分配内存?

  3. 我可以malloc()用于分配和delete解除分配或new分配和free()解除分配吗?

  4. 没有构造函数如何调用析构函数?

标签: c++

解决方案


我可以使用 malloc 为对象分配内存吗?

是的,您可以分配内存,malloc然后该内存可以用于存储对象。

但是,让我们重新表述一下:

我可以使用创建类对象malloc吗?

不。

您的程序具有未定义的行为,因为您从未创建过 object

相反,对 C++ 类对象使用new/ delete(或智能指针),或者只是以正常方式声明它们。

malloc 如何在没有构造函数参数的情况下为类分配内存?

正是这样。它分配内存,但实际上并未ex在该内存中构造任何对象。

如果您真的需要,您现在可以使用新位置来执行此操作。

我可以使用 malloc() 进行分配,使用 delete 进行解除分配,或者使用 new 进行分配,使用 free() 进行解除分配吗?

不。

没有构造函数如何调用析构函数?

没有有意义的方法来回答这个问题,因为您的程序具有未定义的行为。


推荐阅读