菜鸟提问 不知道算不算拷贝构造的问题

dodoboy 2008-12-24 02:02:58
class A
{
public:
void* pData;
unsigned char mflag;
};

struct B
{
void * pData;
......
unsigned char
}
B *b=.........

A *a=(A*)b;
a->mflag=?

class A 用的是默认构造函数,代码中没有声明构造函数。
我想知道a->mflag会是什么值?A *a=(A*)b;算拷贝构造么?
...全文
114 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuruichen 2008-12-24
  • 打赏
  • 举报
回复
问一下这个是什么?
void* pData;
herman~~ 2008-12-24
  • 打赏
  • 举报
回复
这个不算拷贝构造
将一个指针赋值给另一个指针
dodoboy 2008-12-24
  • 打赏
  • 举报
回复
错了 是A *a=(A*)b->pData;
speeder53 2008-12-24
  • 打赏
  • 举报
回复
mk
SearchLife 2008-12-24
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

class A
{
public:
void* pData;
unsigned char mflag;
public:
A(const A& a)
{
cout << "copy" << endl;
}
};

struct B
{
void * pData;
unsigned int mflag;
} ;


int main()
{

B *b=new B;
b->pData = (void*)0xffeeddaa;
b->mflag = 0xff000004;
A *a=(A*)b;

cout << a->mflag << endl;

return 0;
}



我自己试了一下,上面的那位兄弟说的是正确的。
yinghui130 2008-12-24
  • 打赏
  • 举报
回复
强制类型转换,不是拷贝构造函数。拷贝构造和构造函数其实是一样的,只是一个传对象,一个不是以对象为参数而已
dodoboy 2008-12-24
  • 打赏
  • 举报
回复
要是struct B 在void *pData; 和unsigned int c; 之间还有其他的变量的话, 那就是void *pData;后面的那个变量的头一个字节?
SearchLife 2008-12-24
  • 打赏
  • 举报
回复
加个拷贝构造函数试一下:
A(const A& a)
{
cout << "copy" << endl;
}

发现没有调用拷贝构造函数。只是指针类型的强制类型转换。
zhaojiandy 2008-12-24
  • 打赏
  • 举报
回复
不会调用拷贝构造
majun01 2008-12-24
  • 打赏
  • 举报
回复
不是拷贝,是A指针指向了B型内存的区域,
这时候内存会用A的形式来解释,
所以 内存前四个字节是A的void* pData;
第五个字节是A的unsigned char mflag;

所以如果B的结构是:
struct B
{
void * pData;
unsigned int c;
};
且:
B *b=new B;
b->pData=0;
b->c=0xffeeddaa;
那么
A *a=(A*)b;
a->mflag=0xaa;
nullah 2008-12-24
  • 打赏
  • 举报
回复
A *a=(A*)b;算拷贝构造么?
这个不算拷贝构造
将一个指针赋值给另一个指针
a->mflag会输出初始化b的unsigned char的值吧 不确定 看楼下的

64,682

社区成员

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

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