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

new 也可以在栈下 不一定要delete

2012-10-05 
new 也可以在栈上 不一定要deleteC/C++ codeint main(int argc, char* argv[]){int n 10int *p new(&n)

new 也可以在栈上 不一定要delete

C/C++ code
int main(int argc, char* argv[]){    int n =10;    int *p =new(&n) int(100);    cout<<n;    return 0;}

这种用法一般用在什么上面呢。。

[解决办法]
首先new函数有多个重载
这里使用的new不单单是可以复用栈上的空间new,对于堆上的空间也可以实施这种方式的new.

通常使用在对于内存空间要求较高,防止内存碎片过多。
[解决办法]
貌似有见过这种说法,自己没用过……
[解决办法]
这个new操作符分配的内存在栈还是堆中主要看你的地址参数属于哪的


这时的new 不是new-delete组合里的new了;

它申请的内存空间不在delete 管辖范围内了


[解决办法]
简单说是指定要在神马地方(&n)申请内存
 

搜 placement new
[解决办法]
这是placement new的用法。
C/C++ code
int n =10;    int *p =new(&n) int(100);
[解决办法]
http://www.adintr.com/myarticle/operator.html
[解决办法]
这种用法有危险吧?
[解决办法]
主要是对内存管理有更细致的要求。

[解决办法]
感觉没什么用处,用new动态分配内存就是为了让用户来控制内存的释放,在栈上分配的话用户控制不了,跟直接用局部变量有什么差别?
[解决办法]
不如直接用union?
union
{
short i;
char b[2];
}
探讨

引用:

引用:
知道是在指定地址上 有点像union

int n[100] ={1,2,3,4};
short *p =new(&amp;amp;amp;n) short[100];
cout<<hex<<&amp;amp;amp;n<<" "<<p<<" "<<&amp;amp;amp;p[1]<<endl;
cout<<p[2];
……

热点排行