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; 为啥没有调用构造和析构函数?的主要内容,如果未能解决你的问题,请参考以下文章