在struct (II)中初始化字符串对象
Initialize a string object in a struct (II)
这是问题的后续问题,我有一个结构体,如
struct {
int a;
//other fields
string s1;
string s2;
} strMyStruct;
如果对象是其他人的malloc()并将其传递给我进行快速处理(在我负责的函数myFunc
中),我将如何初始化所有成员?我如何确保在函数myFunc
中,数值成员初始化为0,字符串成员初始化为空字符串?
strMyStruct *p = (strMyStruct *)malloc(sizeof(x1));
myFunc(p);
更新1
因为结构体的成员可能经常改变,我不希望我的代码引用任何单独的成员。
根据@BillLynch的建议,您需要使用placement new。您可以通过使用
之类的内容使他的建议更安全。std::unique_ptr<strMyStruct, placement_deleter> uptr = new(p) strMyStruct;
where placement_deleter
struct placement_deleter {
void operator()(strMyStruct *pointer) const {pointer->~strMyStruct()};
}
这是个糟糕的主意。您真的应该用new
而不是malloc()
来分配这个对象。
但是,如果必须的话,可以使用placement new在预分配的内存块中分配一个c++对象:
strMyStruct *p = (strMyStruct *) malloc(sizeof(*p));
new(p) strMyStruct;
并确保在调用free()
:
p->~strMyStruct();
free(p);
相关文章:
- 有没有办法在初始化字符串时避免来自 clang-tidy(fuchsia-default-arguments)的警告?
- 如何在 c++ 中初始化字符串的 2D 数组
- 在 C++ 中初始化字符串重要吗?
- 为什么我不能使用统一初始化初始化来初始化字符串?
- 使用大长度缓冲区初始化字符串流是否会使内存使用量加倍
- 在现代C++中初始化字符串的方式是否有不同
- 初始化字符串 c++ 数组中的值
- 初始化 c 字符串的向量
- 在 do-while 循环中初始化字符串将在检查条件之前跳转到它
- 初始化C++字符串向量的向量
- 初始化字符串矢量阵列时的错误
- 如何初始化字符串以包含C 中所需数量的数字数量
- C 在代码中初始化字符串变量时无控制台输出
- 初始化字符串时,额外的卷曲牙套
- 为什么我不能用"\x"初始化字符串
- 如何在C++中最好地初始化字符串向量
- 从二维数组中的char*初始化c++字符串时,读取大小为1的无效值
- C++初始化字符串数组
- 如何在C++中初始化字符串集
- 如何初始化字符串指针