当调用放置新时,强制投射指向"void*"的指针是否有任何影响?
Does casting a pointer to "void*" have any effect when placement new is called?
我正在审查自定义容器的代码,其中一些部分创建了这样的元素:
::new( (void*)&buffer[index] ) CStoredType( other );
和一些这样做:
::new( &buffer[index] ) CStoredType( other );
所以两者都使用放置new来调用复制构造函数,通过复制其他元素来创建一个元素,但是在一种情况下,指向新元素存储的指针被原样传递,而在另一种情况下,它被强制转换为void*
。
这个转换到void*
有任何效果吗?
可以为非空指针重载new操作符。强制类型转换确保void指针被重载。
例如void* operator new(size_t s, env * e);
一个可编译的例子:
#include <iostream>
#include <new>
void* operator new(std::size_t, int* x)
{
std::cout << "a side effect!" << std::endl;
return x;
}
int main()
{
int buffer[1];
new ((void*)&buffer[0]) char;
new (&buffer[0]) char;
}
相关文章:
- 如何在 C++ 中将 void 函数传递给 void 指针
- 将通用引用强制转换为可调用的 void 指针,反之亦然
- C++为 void 指针分配一个字符串
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 取消引用 void 指针以将值分配给结构
- C 与 C++,处理 void** 指针
- 除了调用全局删除运算符之外,删除一个void指针还能做什么呢
- 用非零值初始化void指针的正确(或最安全)方法
- 将 void 指针分配给另一个 void 指针
- c ++ 我是否需要手动删除指向另一个具体类型的 void* 指针?
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 如何将 std::string 赋回作为 <char>void* 指针传递的 std::vector.data()?
- 将指针传递到结构,与传递 void 指针并强制转换为结构
- 如何在void*指针下检查运行时类型(允许简单类型,没有基类)?
- 用于初始化结构的 void 指针强制转换
- 使用 void 指针:void **ptr.. 如何修改共享内存的值?
- 访问由 void 指针引用的结构的成员
- 你不能在 void 指针上使用指针算法,那么 void 指针数组是如何工作的呢?
- 如何警告 C 中 void 指针上的参数不兼容的类型
- 指向类模板方法的 void 指针的向量