读书人

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

发布时间: 2012-10-05 15:34:34 作者: rapoo

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(&n) short[100];
cout<<hex<<&n<<" "<<p<<" "<<&p[1]<<endl;
cout<<p[2];
……

读书人网 >C++

热点推荐