有关结构体的送分问题

hejialin666 2008-11-14 09:15:40
c++中的结构体有默认的构造函数和析构函数吗?
typedef struct
{}A;

struct B
{};
有什么区别吗?他们两个都有默认的构造函数和析构函数吗?

如果这样定义:
A* aa=new A//会调用第一个的构造函数吗?
delete aa;//会调用第一中的析构函数吗?
谢谢!!
...全文
93 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
rcbblgy 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 henry3695 的回复:]
C/C++ code

#include "iostream"
using namespace std;

typedef struct _A
{
public:
_A()
{
cout<<"A结构的构造函数被调用了吗"<<endl;
}
~_A()
{
cout<<"A结构的析构函数被调用了吗"<<endl;
}
}A;


struct B
{
public:
B()
{
cout<<"B结构的构造函数被调用了吗"<<endl;

[/Quote]

显示定义构造函数和析构函数都会调用,不过怎么测试有没有调用隐含的构造函数呢?
liumingrong 2008-11-14
  • 打赏
  • 举报
回复
c++中struct几乎完全等价于class,除了它默认的成员都是public,还有一般模板声明中不可以用struct代替class或typename
你不写构造和析构函数,编译器会生成默认的
就呆在云上 2008-11-14
  • 打赏
  • 举报
回复
c++中的结构体有默认的构造函数和析构函数吗?
在你没有显示的定义构造和析构函数的时候是有默认的

typedef struct
{}A;

struct B
{};
有什么区别吗?他们两个都有默认的构造函数和析构函数吗?
没有区别的,c++里面无需typedef定义类型,都有默认的构造函数和析构函数

如果这样定义:
A* aa=new A//会调用第一个的构造函数吗?
delete aa;//会调用第一个的析构函数吗?

new跟malloc的不同就是new在分配内存成功的情况下会调用构造函数的,前提是分配内存成功。
最后就是不谢谢!
cyj626 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wuyu637 的回复:]
A* aa=new A//会调用第一个的构造函数吗?
delete aa;//会调用第一中的析构函数吗?

会。

====================
struct在这里比较特殊,一般来说,如果程序中没有使用到需要构造函数的,编译器可以忽略掉默认构造函数。
如果程序中使用到了,需要构造函数的,编译器会像class一样给他一个默认构造函数。


====================

typedef的作用是申明了一个类型,这个在c里的区别比较大,在c++里没有区别。…
[/Quote]
up
帅得不敢出门 2008-11-14
  • 打赏
  • 举报
回复
typedef struct
{}A;

struct B
{};
有什么区别吗?
没有啥区别 A B都是一个结构体类型
只是声明的时候第一个可能会方便些(一些旧编译器声明可能要加struct)
A a;
struct B b;
单是new单个的时候 可以

struct B
{
int a;
};

int main()
{
B *p = new B;
p[0].a = 10;
cout << p[0].a ;
delete p;
return 0;
}


10
如果是new多个就不行了,得定义默认构造函数
qqwx_1986 2008-11-14
  • 打赏
  • 举报
回复
都有默认构造函数和析构函数
A* aa=new A();
delete aa
会调用默认的构造函数和析构函数
wuyu637 2008-11-14
  • 打赏
  • 举报
回复
A* aa=new A//会调用第一个的构造函数吗?
delete aa;//会调用第一中的析构函数吗?

会。

====================
struct在这里比较特殊,一般来说,如果程序中没有使用到需要构造函数的,编译器可以忽略掉默认构造函数。
如果程序中使用到了,需要构造函数的,编译器会像class一样给他一个默认构造函数。


====================

typedef的作用是申明了一个类型,这个在c里的区别比较大,在c++里没有区别。

如果在c里,没有typedef一个struct,下次使用的时候就要使用关键字struct
struct B
{};
struct B example;

如果使用了typedef,就不要使用struct关键字
typedef struct B
{};
B example2;
shuyisheng 2008-11-14
  • 打赏
  • 举报
回复
这个没有构造函数,new只能是分配内存空间,要调用构造函数,要自己写一个构造函数方法,并显示的调用。
typedef struct
{
A(void);
}A;
A(VOID)
{
COUT<<"A STRUCTOR"<<endl;
}

调用A->A();
我看你有戏 2008-11-14
  • 打赏
  • 举报
回复


#include "iostream"
using namespace std;

typedef struct _A
{
public:
_A()
{
cout<<"A结构的构造函数被调用了吗"<<endl;
}
~_A()
{
cout<<"A结构的析构函数被调用了吗"<<endl;
}
}A;


struct B
{
public:
B()
{
cout<<"B结构的构造函数被调用了吗"<<endl;
}
~B()
{
cout<<"B结构的析构函数被调用了吗"<<endl;
}
};

void main()
{
A* aa=new A;//会调用第一个的构造函数吗?
delete aa;//会调用第一中的析构函数吗?
B b;
}
//VC6.0测试通过
hai040 2008-11-14
  • 打赏
  • 举报
回复
如果没有构造,new A会报错,没有的构,delete aa会报错

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧