首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

把用new创办的对象取值之后赋值给一个引用合适么

2013-08-01 
把用new创建的对象取值之后赋值给一个引用合适么?#include iostreamusing namespace stdint main(){int

把用new创建的对象取值之后赋值给一个引用合适么?

#include <iostream>

using namespace std;

int main()
{
   int& a = *(new int(3));
   
   cout << a << endl;
   
   return 0;
}
这个是可以编译通过的,结果也是对的。

少用指针的说法我已经听得太多了。那么用new创建的对象有必要赋值给一个引用么?在实际的工程中有这么用的么?感觉这样的话至少可以少打几个字符(从->变成.),但是可能不容易看出这个对象是通过new得到的,毕竟直接定义的对象一般可能不会需要->。
[解决办法]
没有这么用的,太容易泄漏
[解决办法]
int& a = *(new int(3)); 这样的写法在项目中要被骂娘,你的内存要是泄露了,哭死你。
[解决办法]
你这个例子本身就内存泄露了。
引用的目的是什么?无非是想避免创建临时变量。
你用new已经创建了实例,使用指针岂不更好。
另外:Qt推荐用指针,而不是引用。
[解决办法]
4L,怎么可能会崩掉呢,这种才是合法的做法。
[解决办法]
两种都是可以,都是动态删掉该内存,一般没人去这样做,都是采用指针的形式。
[解决办法]
引用:
void f1()
{
int* a = new int(3);
int& b = *a;
   
cout << *a << ' ' << b << endl;
{
cout << a << endl;
cout << &b << endl;
delete a;
cout << a << endl;
cout << &b << endl;
}
}
void f2()
{
int* a = new int(3);
int& b = *a;
   
cout << *a << ' ' << b << endl;
{
cout << a << endl;
cout << &b << endl;
delete &b;
cout << a << endl;
cout << &b << endl;
}
}

int main()


{
f1();
f2();

return 0;
}



这是结果:
3 3
0049C1B8
0049C1B8
00008123
0049C1B8
3 3
0049C1B8
0049C1B8
0049C1B8
0049C1B8

完全看不懂。但是感觉delete &b好像是没有把内存释放掉。


你这是release版吗?用Release版运行一遍。
Debug版中delete a可能会做一些多余的事,以便于发现“释放后使用”的错误。
[解决办法]
我上面只是说释放的方式,你后面的那个指针在输出数据,你这是使用了野指针,导致未定义的结果
[解决办法]
编译器是什么?
我这里没有这种现象。

热点排行