当我惊讶于下面的代码没有按预期工作时,我正在玩模板:
#include <iostream>
#include <string>
#include <cstring>
template <class Object>
class CreatorTWO {
public:
CreatorTWO (void) {}
~CreatorTWO (void) throw () {}
template <typename... Object_Params>
Object* create (const Object_Params&... params_) {
Object _temp_obj = Object(params_...);
size_t _obj_bytes = sizeof (_temp_obj);
void * _mem_block = std::malloc (_obj_bytes);
std::memmove(_mem_block,&_temp_obj,_obj_bytes);
//The line below prints the dereferenced object before it is returned:
std::cout << *(static_cast <Object*> (_mem_block)) << '\n';
return static_cast <Object*> (_mem_block);
}
};
int main (int argc, char* argv[]) {
CreatorTWO <std::string> _c2;
std::string* _strp = _c2.create("Hello");
std::cout << *_strp << '\n';
std::free (_strp);
return 0;
}
上面的代码应该创建一个传递给它的参数数量不同的对象。但是,当我创建一个以 std::string 为模板的实例时,传递“Hello”参数应该会给我一个指向包含“Hello”的字符串的指针。然而,这种情况并非如此。如果你运行上面的代码,pre 和 post 的值是不同的,pre 是正确的。有谁知道是什么导致了这种不良行为?谢谢。