初始化结构中的字符串对象(II)

时间:2015-05-22 19:30:22

标签: c++ string

这是来自question的后续问题,我有一个类似

的结构
Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "CallMyFunction", "myFunction()", true);

如果对象是malloc(),我将如何初始化所有成员并将其传递给我以便快速处理(在我负责的函数struct { int a; //other fields string s1; string s2; } strMyStruct; 中)。如何在函数myFunc中确保将数字成员初始化为0,将字符串成员初始化为空字符串?

myFunc

更新1

由于结构的成员可能经常更改,我不希望我的代码引用任何单个成员。

2 个答案:

答案 0 :(得分:2)

根据@BillLynch的建议,您需要使用placement new。你可以通过使用

的内容来使他的建议更安全
std::unique_ptr<strMyStruct, placement_deleter> uptr = new(p) strMyStruct;

其中placement_deleter是

struct placement_deleter {
   void operator()(strMyStruct *pointer) const {pointer->~strMyStruct()};
}

看看这是否有效......

答案 1 :(得分:0)

这是一个糟糕的主意。你真的应该用NSString *str1 = [NSString stringWithFormat:@"abc"]; NSString *str2 = [NSString stringWithFormat:@"xyz"]; NSString *str3 = [NSString stringWithFormat:@"123"]; NSMutableArray *someArray = (NSMutableArray*)@[@"1",@"2",@"3"]; NSMutableArray *original = (NSMutableArray*)@[str1, str2, [someArray mutableCopy]]; NSMutableArray *deep = [original mutableCopy]; [[original objectAtIndex:2] addObject:str3]; for (id obj in original) { NSLog(@"\nIn Original:: \nvalue is:%@, at :%p; Address of object: %p\n",obj, obj, &obj); } for (id obj in deep) { NSLog(@"\nIn Deep:: \nvalue is:%@, at :%p; Address of object: %p\n",obj, obj, &obj); } NSLog(@"\n Address of Original : %p \n", &original); NSLog(@"\n Address IN Original : %p \n", original); NSLog(@"\n Address in first object of original : %p \n", [original objectAtIndex:0]); 而不是new分配这个对象。

但如果必须,我们可以使用placement new在预分配的内存中分配C ++对象:

malloc()

确保在致电strMyStruct *p = (strMyStruct *) malloc(sizeof(*p)); new(p) strMyStruct; 之前致电析构函数:

free()