无锡网站改版多少钱做网站要会哪些软件
无锡网站改版多少钱,做网站要会哪些软件,浙江金华网站建设,北京城乡建设部网站首页北京一、new过对象吗#xff1f;
这样的代码
int* p new int(10); // 申请内存 放个10进去
delete p; // 清理new 干了什么事#xff1f;
申请一块内存#xff08;找操作系统要空间#xff09;在这块内存上放个对象#xff08;构造#xff09;
二、拆开做// 申请内存 放个10进去deletep;// 清理new 干了什么事申请一块内存找操作系统要空间在这块内存上放个对象构造二、拆开做想象你去饭店吃饭正常情况分开做的情况点菜 → 吃饭 → 结账包场办宴会正常new/delete先包场地再一桌桌上菜什么时候要分开做// 场景1一次性要100个int的空间但先不赋值int*buffernewint[100];// 这就new好了但里面的值是随机的// 场景2从别处拷贝数据过来intsource[5]{1,2,3,4,5};// 想把source的数据放到buffer的前5个位置三、construct_at在指定位置放对象举个例子#includeiostream#includememoryusingnamespacestd;intmain(){// 1. 先找块内存就像先找块空地void*placeoperatornew(sizeof(int));// 找了块能放int的空地// 2. 在这块地上放个对象construct_atint*pconstruct_at(static_castint*(place),100);// ↑这块地 ↑放个值100进去coutp指向的值: *pendl;// 输出100// 3. 用完要清理destruct_at(p);// 把对象析构清空这块地operatordelete(place);// 把内存还给系统}对比 new// new的方式int*p1newint(100);// 找地 放对象 一步完成deletep1;// 清空 还地 一步完成// construct_at的方式void*memoperatornew(sizeof(int));// 只找地int*p2construct_at((int*)mem,100);// 只放对象destruct_at(p2);// 只清空地operatordelete(mem);// 只还地四、uninitialized_copy批量拷贝到空地#includeiostream#includememoryusingnamespacestd;intmain(){// 源数据已经摆好的桌子intsource[5]{10,20,30,40,50};// 目标地一片空地未初始化的内存int*dest(int*)operatornew(sizeof(int)*5);// 看看空地里的随机值cout空地里的垃圾值: ;for(inti0;i5;i){coutdest[i] ;// 随机数}coutendl;// 把source的桌子搬到空地上uninitialized_copyuninitialized_copy(begin(source),end(source),dest);// ↑从哪里搬 ↑搬到哪cout搬完之后: ;for(inti0;i5;i){coutdest[i] ;// 10 20 30 40 50}coutendl;// 搬完要清理for(inti0;i5;i){destruct_at(desti);// 一张张桌子撤掉}operatordelete(dest);// 把地还给系统}五、为什么要用 uninitialized_copy 而不是普通 copy对比一下vectorintv(5);// v已经构造好了里面已经有5个intint*raw(int*)malloc(sizeof(int)*5);// raw是原始内存// 普通copy目标必须已经构造好copy(source,source5,v.begin());// ✅ v已经构造好了copy(source,source5,raw);// ❌ raw是原始内存不行// uninitialized_copy目标可以是原始内存uninitialized_copy(source,source5,raw);// ✅ 专门处理原始内存六、记住三点就行1. construct_at 在空地上放东西construct_at(地址,值);// 在地址指向的内存放个值为...的对象2. uninitialized_copy 批量搬东西到空地uninitialized_copy(开始,结束,目标);// 把一段数据搬到目标空地3. destruct_at 把东西撤走destruct_at(地址);// 析构地址上的对象清理