社区
C语言
帖子详情
C++问题:请问对象之间是否可以互相引用?
布鲁克零三四四
2002-04-17 07:30:10
C++问题:请问对象之间是否可以互相引用?
比如两个类,我希望A中有B的指针,B中有A的指针,请问这样的要求是否允许实现,怎么实现?
以下代码在VC中未能通过编译。
class B;
class A
{
B m_b;
}
class B
{
A m_A;
}
...全文
103
8
打赏
收藏
C++问题:请问对象之间是否可以互相引用?
C++问题:请问对象之间是否可以互相引用? 比如两个类,我希望A中有B的指针,B中有A的指针,请问这样的要求是否允许实现,怎么实现? 以下代码在VC中未能通过编译。 class B; class A { B m_b; } class B { A m_A; }
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
布鲁克零三四四
2002-04-24
打赏
举报
回复
谢谢各位,在大家的帮助下,我的问题已经说理解决了。
我再补充一下吧,
我发现在使用申明的方式中(VC中肯定是这样)
A *pa;
与
A* pa;
是有区别的,在这种互相引用的代码中表现的很明显
再次谢谢大家。
bequickly
2002-04-18
打赏
举报
回复
类和其对象是两个概念
静态的类的描述是不能表现出对象在生存期间的动态关系的
lsaturn
2002-04-17
打赏
举报
回复
长见识
我原来以为声明就可以了。
Kingchen
2002-04-17
打赏
举报
回复
调用指针嘛,当然要用到指针符了。
std::coding::peasant
2002-04-17
打赏
举报
回复
据我理解:
class B;
class A
{
B m_b;
}
class B
{
A m_A;
}
无法分配内存,A是鸡,B是蛋,到底是鸡大还是蛋大?
m_b占用的内存和B类的内存相同
m_A占用的内存和A类的内存相同
那么他们的构造函数放到哪里去了?
sizeof(A)=sizeof(B)+sizeof(A构造)
sizeof(B)=sizeof(A)+sizeof(B构造)
此方程无解
class B;
class A
{
B *m_b;
}
class B
{
A *m_A;
}
就可以了,m_b和m_A只是一个地址,在VC里面是DWORD,占4个字节,如果用new分配内存,
m_b和m_A的内存分配到新的地址空间了,没有谁包含谁的管理了。
LionEagle
2002-04-17
打赏
举报
回复
class B;
class A
{
B m_b;
};
class B
{
A m_A;
};
之所以不通过是因为C++编译器不进行全局的优化,它要求在用一个类型来定义变量之前该类型必须已经定义过了,之所以要这样是因为不知道类型定义的话,编译器无法为变量分配内存
在B m_b;之前,只有class B;,这只是一个声明而不是定义,所以会报错
而改为B* m_b;或B& m_b;能通过是因为B* m_b是指针,编译器总可以为指针分配内存,它只要知道指针是指向什么类型即可,所以只要有声明就可以了。对于引用,它在实现时和指针差不多,因而也只需要声明即可。
如果C++编译器能全局优化的话,以下代码也可以通过,因为信息足够为变量分配内存,不过因为C++编译器没有全局性,所以实际上不能通过
class A
{
B m_b; // 只要编译器向后找就可以找到class B的定义
}
class B
{
A* m_A;
}
所以要使用者来避免这样的情况,做法也很简单,将class A与class B定义颠倒,再再class B前面加上 A的声明即可,即
class A;
class B
{
A* m_A;
};
class A
{
B m_b; // 这里可以不定义为指针,因为前面有A的定义,如果前面只有
// A的声明的话,就要定义为指针(或引用)
};
bequickly
2002-04-17
打赏
举报
回复
HOHO 偶快了那么一点点 ^_^
bequickly
2002-04-17
打赏
举报
回复
class B;
class A
{
B* m_b;
};
class B
{
A* m_A;
};
C++
包含类两个类
互相
调用彼此的类成员变量和方法
C++
,C 包含类两个类
互相
调用彼此的类成员变量和方法,里面介绍了如何在头文件中创建相互的类
对象
,简单易懂
C++
类
互相
引用
C++
中经常会遇到一个
问题
:两个类
之间
互相
用到对方。
问题
: 这种是不是一个好的设计? 如果不是一种好的设计,有什么办法规避? 如果没办法规避,代码应该如何写来避免出现各种编译或运行
问题
? 参考: https://stackoverflow.com/questions/4964482/how-to-create-two-classes-in-c-which-use-each-other-as-data
问题
举例 File: bar.h #ifndef BAR_H #define BAR_H #include
C++
:不同类
对象
之间
访问数据的3种简单常用方法
C++
编程中经常出现两个不同的类
对象
之间
相互访问数据的需要,但是成员变量不是public形式,无法直接访问相应的变量,抛开全局变量不谈,常用的方法有:1类封装留下的接口函数、2友元机制、3类静态成员变量。 回顾: 类是面向
对象
程序设计语言中的一个概念。类是对某个
对象
定义,它含有有关
对象
的动作方式的信息,包括他的名称,方法,属性和事件 类成员有3种不同的访问权限 ...
C++
编程:使用 std::weak_ptr 解决 std::shared_ptr 循环
引用
导致的内存泄漏
智能指针循环
引用
很容易导致
C++
中的内存泄漏。通过使用来管理双向链表或其他类似结构中的节点连接,可以确保正确的内存管理,并避免这类
问题
。在实际应用中,始终要注意指针的所有权语义,确保在访问节点之前检查的有效性是非常重要的,以避免潜在的错误和异常。
C++
std::shared_ptr 与 std::weak_ptr 详解
•
引用
计数:std::shared_ptr 内部维护一个
引用
计数器,记录有多少个 std::shared_ptr 实例共享同一个
对象
。std::weak_ptr 是一种不增加
引用
计数的智能指针,它可以安全地
引用
一个由 std::shared_ptr 管理的
对象
。std::weak_ptr 不能直接访问
对象
,需要通过 lock() 方法将其转换为 std::shared_ptr。在这个修改后的代码中,B 持有 A 的 std::weak_ptr,这样就不会增加 A 的
引用
计数,从而避免了循环
引用
。
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章