这是来自question的后续问题,我有一个类似
的结构Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "CallMyFunction", "myFunction()", true);
如果对象是malloc(),我将如何初始化所有成员并将其传递给我以便快速处理(在我负责的函数struct {
int a;
//other fields
string s1;
string s2;
} strMyStruct;
中)。如何在函数myFunc
中确保将数字成员初始化为0,将字符串成员初始化为空字符串?
myFunc
更新1
由于结构的成员可能经常更改,我不希望我的代码引用任何单个成员。
答案 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()