C++拾遗--定位new表达式

C++拾遗--定位new表达式

前言

new表达式,默认下把内存开辟到堆区。使用定位new表达式,可以在指定地址区域(栈区、堆区、静态区)构造对象,这好比是把内存开辟到指定区域。

正文

定位new表达式的常见形式

  • new(address) type;
  • new(address) type(initializers);
  • new(address) type[size];
  • new(address) type[size]{braced initializer list};

定位new表达式调用 void *operator new(size_t, void *); 分配内存。

示例代码

#include <iostream>
using namespace std;
char addr1[100];
int main()
{
	cout << "******定位new表达式演示***by David***" << endl;
	char addr2[100];
	char *addr3 = new char[100];
	cout << "addr1 = " << (void*)addr1 << endl;
	cout << "addr2 = " << (void*)addr2 << endl;
	cout << "addr3 = " << (void*)addr3 << endl;
	int *p = nullptr;
	//把内存分配到静态区
	p = new(addr1)int;
	*p = 1;
	cout << (void*)p << "  " << *p << endl;
	//把内存分配到栈区
	p = new(addr2)int;
	*p = 2;
	cout << (void*)p << "  " << *p << endl;
	//把内存分配到堆区
	p = new(addr3)int;
	*p = 3;
	cout << (void*)p << "  " << *p << endl;
	cin.get();
	return 0;
}

运行

本专栏目录

所有内容的目录

时间: 2024-12-29 17:41:34

C++拾遗--定位new表达式的相关文章

c++学习 定位new表达式

在cpp中,new主要有3种用法:实例化一个对象:实例化一个数组:定位new表达式.在这里主要讨论第三种用法,定位new表达式. 定位new表达式,就是在内存中new一块地址,然后根据程序的需要,将大小适合的实例对象放到此内存块中操作的方法.在此我借用<cpp primer 3rd>中p347中的例子给予说明,不足之处,恳请各位读者斧正. 首先创建测试用的类Foo //测试所用的类 class Foo { public:     Foo(int val = 0)     {         _

[C++]placement new 定位new 表达式

默认的new 把内存开辟到堆区,大小可以指定,也就是做两件事情:(1)分配内存.(2)在分配好的内存上构建对象.原型如下: void *operator new( size_t, void * p ) throw() { return p; } placement new 是new的一个变体,它将两者分开来做.在placement new中,我们可以传递一个已经分配好的内存然后在这个内存上构建对象.这样,可以在指定地址区域(栈区.堆区.静态区)构造对象,这个构建过程不需要额外分配内存,只需要调用

malloc和定位new表达式

#include <iostream> #include <stdlib.h> using namespace std; class xiaok{ public: int k; int a; void han(){cout<<k<<a<<endl;} }; int main(int argc, char const *argv[]) { xiaok *p=(xiaok*)malloc(sizeof(xiaok)); new(p) xiaok();

【JSP】EL表达式语言

EL简介 EL语言原本是JSTL1.0中的技术(所以EL和JSTL配合如此亲密和默契也就是自然的了),但是从JSP2.0开始(JSTL1.1)就分离出来纳入了JSP的标准了.因此EL不需要任何jar包,他是集成到JSP技术本身中的了. 由于EL定位是 表达式语言,因此EL只能用于做简单的运算和取值,它是JSP无脚本化的一个利器,非常易学. EL的特点 1.所有的EL表达式的格式 ${   expression   },例如取的一个对象user的age属性 ${ user.name } 2.可以使

sellenium页面元素的定位方法

1.findElements函数可用于多个元素定位 (1)使用ID定位:driver.findElement(By.id("ID值")); 例:HTML代码: 定位语句代码:WebElement username=driver.findElement(By.id("username")); WebElement password=driver.findElement(By.id("password"));  WebElement subimit=

selenium元素定位方法介绍

元素定位方法 元素名称 webdriver API id find_element_by_id() name find_element_by_name() class name find_element_by_class_name() tag name find_element_by_tag_name() link text find_element_by_link_text() partial link text find_element_by_partial_link_text() xpat

Web元素定位方法_8大元素+xpath定位

元素定位,顾名思义就是根据元素的特征,来确认元素的条件,然后根据条件去找到唯一的那个元素. 一.八大元素 1.只根据元素的一个属性来找元素(6大) 1)id.name.class_name(只支持一个class值).tag_name 2)只针对a元素 link_text.partial_link_text 示例: 1 # class - 只能是class属性当中的一个值 2 driver.find_element_by_class_name("s_ipt") # 1个元素 - 匹配到的

C++ Primer 学习笔记_98_特殊工具与技术 --优化内存分配

特殊工具与技术 --优化内存分配 引言: C++的内存分配是一种类型化操作:new为特定类型分配内存,并在新分配的内存中构造该类型的一个对象.new表达式自动运行合适的构造函数来初始化每个动态分配的类类型对象. new基于每个对象分配内存的事实可能会对某些类强加不可接受的运行时开销,这样的类可能需要使用用户级的类类型对象分配能够更快一些.这样的类使用的通用策略是,预先分配用于创建新对象的内存,需要时在预先分配的内存中构造每个新对象. 另外一些类希望按最小尺寸为自己的数据成员分配需要的内存.例如,

CPP之内存分配

new & delete expression 1. Introduction A new expression allocates and constructs an object of a specified type. A new[] expression allocates and constructs an array of objects. These expressions use the corresponding version of the library operator