c++(在类中)执行buf=new char[i];delete []buf; 为啥没有调用构造和析构函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++(在类中)执行buf=new char[i];delete []buf; 为啥没有调用构造和析构函数?相关的知识,希望对你有一定的参考价值。

//你理解错了。
//只有创建类的对象时才会调用此类的构造函数。
//只有对象的内存空间被释放时,即对象超出了作用域,
//亦即对象的生命期即将结束时,才会调用析构函数。
//下面是一个例子。
#include<iostream>

using namespace std;

class A

public:
A(string n):name(n)

cout<<name<<",调用构造函数"<<endl;

~A()

cout<<name<<",调用析构函数"<<endl;

private:
string name;
;

int main()

//new A("a")会在堆中创建一个类A的对象,因此,
//会调用构造函数
A *pta=new A("a");
//主动释放pta指向的对象的堆内存空间,会调用析构函数
delete pta;


//在栈中创建对象,会调用构造函数
A b("b");

//此处超出了对象"b"的作用域,"b"的内存空间会释放,
//因此,会调用析构函数
return 0;
参考技术A 构造函数是生命这个class类型的变量的时候调用 析构函数是程序结束到末尾的时候调用 你只是new 和delete一个变量 和类本身没有关系本回答被提问者采纳

C++中类的一个数据成员是枚举类型,那么它在类中该怎么定义?

C++中的枚举类型是延续C语言的语法,主要用于在分支结构中做判断的条件更明了,更容易看懂,比如在进入一个操作界面后有很多操作 1:注册,2:增加,3:删除,4:修改,5:查询
可以定义枚举类型 enum opt_num Creat_new , Add , Delete , Alter , Select ;
默认状态下,Creat_new = 0,后面的值依次加1,如果你 这样写 enum opt_num Creat_new = 2 , Add , Delete , Alter , Select ; 也可以那么Add = 3。 大致语法就是这样子,下面是更易懂的程序代码: int opterator_num ; cin>>opterator_num ;
if(opterator_num ==Creat_new )

//操作省略

if(opterator_num == Add ) //很明显看得懂这是选择了增加的操作标志



如果不用枚举类型会怎样呢 看下面:
if(opterator_num == 1) //别人不知道你的1代表的是什么,对比中可以知道枚举类型的优势

//实际上这是注册的实现代码

希望可以帮助到你哈 亲 给好评哦 谢谢支持!!!
参考技术A 在全局中声明
enum directionUP, DOWN, LEFT, RIGHT;
类中
class object

direction di; //定义枚举类型变量
public:
object()

di = UP; //这样赋值
参考技术B enum weekday

sun,mon,tue,wed,thu,fri,sat
;

以上是关于c++(在类中)执行buf=new char[i];delete []buf; 为啥没有调用构造和析构函数?的主要内容,如果未能解决你的问题,请参考以下文章

C++在类中定义vector并初始大小的问题

c++ uint32 如何转 const char

C#和C C++调用dll变量转换问题,双指针?

使用 C++ 查找文件

c# 中类的实例化

C++:在类中使用静态成员函数