c++中的定位new操作符是什么,java中有吗?
what is placement new operator in C++ and does java has it?
我听说过c++中的位置new操作符。我不明白这是什么。然而,我可以看到它可以在stackoverflow的问题下使用。我也很困惑我们是否在java中有这个。所以我的问题非常精确:什么是放置新操作符,我们在java中有类似的东西吗?
请注意,不要与stackoverflow上的其他问题混淆:它们不是这个问题的重复
下面的文章解释了在c++中放置new的含义:http://www.glenmccl.com/nd_cmp.htm
这个术语本身与重载的new
语句相关。由于Java根本不允许重载操作符,特别是new操作符,因此new的位置与Java无关。
但是你有几个选择。
- 使用工厂或构建器模式
- 使用包装器/装饰器模式(可能与工厂一起),允许通过包装类的方法来更改某些类的功能。 面向方面编程。它的工作原理几乎类似于装饰器模式,但可以使用字节码修改来实现。
- 类加载器拦截
术语"placement new"本身有点模棱两可。使用这个术语在c++标准中以两种不同的方式,因此由c++社区。
第一个含义是指任何重载的operator new
函数它有多个参数。附加参数可以是几乎可以用于任何事情—有两个例子标准本身:operator new(size_t, void*)
和operator new(size_t,
std::nothrow_t const&)
。
第二个含义是指特定的重载operator new(size_t,
void*)
,它实际上用于显式调用类的构造函数对象在从其他地方获得的内存上:分开分配从初始化。(它将用于std::vector
类,例如,capacity()
可能大于size()
)
在Java中,内存管理被集成到语言中,而不是
Placement new允许指定接受额外参数的自定义分配器。
还有一个预定义的位置分配器,它将一个指针作为额外的参数,并返回该指针分配的结果,基本上允许您的代码在您指定的地址创建对象。
但是,您可以定义其他类型的分配器,它们接受其他参数,例如,我们的调试分配器将文件名和执行分配的行作为额外参数。将这些额外的信息存储在已分配的对象中,可以让我们追溯到已经创建的某个对象实例的源代码,例如,该对象实例在释放后被泄露或覆盖或使用。AFAIK Java工作在更高的概念层,没有指针的概念(只有空指针异常;-))。内存只是一个黑魔法盒,程序员从来不会使用内存地址的概念。
我只知道Java 1.1,当时决定不把时间花在那个商业产品上,所以今天Java的逻辑水平可能已经降低到足以达到随机访问内存的概念。
- 在java中解决这段代码时面临循环中的问题
- 尝试用java代码编译和运行c++代码
- 在这种情况下,java对象是否可以调用本机函数
- 在java中读取c++字节的位字段
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 使用已使用 java 编码的 openssl 解码数据
- SWIG Java 在使用 -DSWIGWORDSIZE64 时将int64_t转换为 jlong
- Android Java USB for native cpp
- 在由Sublime文本3编译后在cmd上显示Java程序输出
- C++ equivalent to Java Map getOrDefault?
- C++ 中的 Java 样式枚举
- 是否有技术原因阻止 Java 中的 final C++ 像 const 一样严格?
- 加密在 Windows、C++ 和 Java 中传输中的数据
- Java从C++回调到C++回调
- 在 c++ 中模拟输入并在 JAVA 中读取它?
- c++中new操作符与java中new操作符的区别
- c++中的定位new操作符是什么,java中有吗?
- c++函函数到Java,重载操作符()()
- Java和c++的操作符有什么不同吗?
- c++到Java的代码移植使用位操作符和unsigned int