我正在尝试在我的Obj
类中执行以下操作:
public:
template <typename T>
Obj(T & o) {
siz = sizeof(o);
p = malloc(siz);
memcpy(p, &o, siz);
}
private:
void * p;
size_t siz;
如果我做这样的事情,那很好:
string str = "foobar";
Obj u = Obj(str);
但是如果我做这样的事情就不会:
Obj u = Obj(string("foobar"));
结果是一个字符串填充了随机字符。
要检索字符串,我使用:
string S() {
return *((string *)p);
}
任何想法?
最佳答案
正如其他人所评论的那样,您不应该这样做。您提供的代码示例不适用于非POD的任何内容(http://stackoverflow.com/questions/146452/what-are-pod-types-in-c)。执行memcpy时,可能无法正确初始化新对象。例如。如果它具有作为指针的成员。在字符串的情况下,其实现可能持有指向原始字符串拥有的字符缓冲区的指针。当原始字符串被删除时,字符缓冲区也将被删除。但是,您复制的对象仍将指向已删除的缓冲区。
关于c++ - 从模板分配空指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12611332/