VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: aleckray

觉得c++里引用一个不好的地方

[复制链接]

0

主题

11

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-1-11 11:09:01 | 显示全部楼层
这里没有将引用 ra 指向另一个对象——它只是修改了引用 ra 指向的对象(内存块)值
回复

使用道具 举报

0

主题

23

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-1-13 12:18:02 | 显示全部楼层
>>这样如果不知道的话,往往就因为这样的机制而调试很久

不知道的话就多学学。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-21 22:36:01 | 显示全部楼层
什么叫虚表啊?我是菜鸟。
回复

使用道具 举报

0

主题

9

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-22 09:09:01 | 显示全部楼层
TO finefineboy
正是因为你所说的原因,才表现出楼主所说的那种行为.

在C++中,值语意是基础.这和很多其它面向对象的语言有所不同.而指针则是用来表达引用语意的(指针本身也是值..).楼主所说的问题其实就是因为C++中是值语意行为,而他想要的是引用语意的东西.想要这种东西,只有自己实现,C++提供了足够多的支持来做这个.
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-23 21:00:02 | 显示全部楼层
g791113  


   
一看楼主就是没学过软件工程的。

  

第一个f()是多态.
第二个f()才是基类的
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-31 05:36:02 | 显示全部楼层
A &ra = *pa;
ra.f();
ra = c;
ra.f();

楼上的搞错了吧,
这两个f都是多态,都是pa->f
回复

使用道具 举报

0

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-31 12:27:02 | 显示全部楼层
人是人他妈生的,妖是妖他妈生的,妖如果有了人性,那就不是妖了,是人妖...
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-31 17:55:16 | 显示全部楼层
书看的少,调试时间自然就长了。楼主多看书吧
回复

使用道具 举报

0

主题

11

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-2-2 07:09:01 | 显示全部楼层
class A
{
public:
int v;
A() { }
virtual void f() { cout << "A::f()" << endl; }
virtual ~A() { }
};

class B : public A
{
public:
char *m_str;
B() { m_str = new char[10];}
void f() { cout << "B::f()" << endl; }
virtual ~B() { delete m_str;}
};

以上在LZ的代码的B类里面加了new 和delete。
执行与LZ相同的main函数,如果=操作符会拷贝虚表,那么必然造成内存泄露

回复

使用道具 举报

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-10 13:00:01 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表