new(p) T1(value)

这叫place   new,在指针p所指向的内存空间创建一个类型为T1的对象。调用的构造函数接受一个类型为const   T2&(或其他兼容类型)的参数

new   placement 
你可以简单的理解为C中的realloc,就是在已有空间的基础上,重新分配一个空间,可以不破坏原来数据,也可以把数据全部用新值覆盖 

一下是我搜集的一些笔记 
如果你想在预分配的内存上创建对象,用缺省的new操作符是行不通的。要解决这个问题,你可以用placement   new构造。它允许你构造一个新对象到预分配的内存上: 

//   buffer   是一个void指针   (void   *) 

//   用方括号[]   括起来的部分是可选的 

[CYourClass   *   pValue   =   ]   new(   buffer)   CYourClass[(   parameters)]; 

下面是一些例子: 

#include   <new 

class   CTest 



public: 

CTest() 

{} 

CTest(   int) 

{} 

/*   代码*/ 

}; 

int   main(int   argc,   char*   argv[]) 



//   由于这个例子的目的,我们不考虑内存对齐问题 

char   strBuff[   sizeof(   CTest)   *   10   +   100]; 

CTest   *   pBuffer   =   (   CTest   *)strBuff; 

//   缺省构造 

CTest   *   pFirst   =   new(pBuffer)   CTest; 

//   缺省构造 

CTest   *   pSecond   =   new(pBuffer   +   1)   CTest; 

//   带参数的构造; 

//   不理会的指针 

new(pBuffer   +   2)   CTest(   5); 

//   带参数的构造 

CTest   *   pFourth   =   new(   pBuffer   +   3)   CTest(   10); 

//   缺省构造 

CTest   *   pFifth   =   new(pBuffer   +   4)   CTest(); 

//   构造多个元素(缺省构造) 

CTest   *   pMultipleElements   =   new(pBuffer   +   5)   CTest[   5]; 

return   0; 



当你有自己的内存缓冲区或者在你实现自己的内存分配策略的时候,placement   new会很有用。事实上在STL中广泛使用了placement   new来给容器分配内存;每个容器类都有一个模版参数说明了构造/析构对象时所用的分配器(allocator)。 

在使用placement   new的时候,你要记住以下几点: 

加上头文件#include   <new   你可以用placement   new构造一个数组中的元素。   要析构一个用placement   new分配的对象,你应该手工调用析构函数(并不存在一个“placement   delete”)。它的语法如下: 

pFirst-~CTest(); 

pSecond-~CTest(); 

//.   .   .   等等

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AtomicInteger t1 = new AtomicInteger()是创建一个初始值为0的AtomicInteger对象。AtomicInteger是Java并发包中提供的原子类,用于对int类型的整数进行原子操作。它使用底层的CAS(Compare and Swap)等方法来实现原子操作。CAS是一种乐观锁技术,它通过比较内存中的值与期望值来判断是否需要更新,并在需要时进行更新。因此,使用AtomicInteger的incrementAndGet方法可以保证对t1进行原子操作,即每次对t1进行自增操作时都能保证线程安全。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [AtomicInteger原理](https://blog.csdn.net/weixin_35411443/article/details/114511648)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Java原子类应用场景如:AtomicInteger的使用](https://blog.csdn.net/qq_35222843/article/details/114314657)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [java并发之AtomicInteger源码分析](https://download.csdn.net/download/weixin_38606076/12749202)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值