C++ 在汇编中,std::vector::emplace_back(新T(args))和std::vector::emplace_back(std::make_unique<;T>;(args))之间有什么区别?
我想知道这两种实现之间的区别:C++ 在汇编中,std::vector::emplace_back(新T(args))和std::vector::emplace_back(std::make_unique<;T>;(args))之间有什么区别?,c++,assembly,smart-pointers,C++,Assembly,Smart Pointers,我想知道这两种实现之间的区别: std::vector<std::unique_ptr<Character>> characters; characters.emplace_back(new Character("Character", 100)); 在本例之后,编译(汇编视图)时是否有任何差异,或者这两种方法之间是否有不同的汇编指令 如果重要的话,字符是如何定义的?它是否可以复制,或者它是否有std::string成员或其他什么。如果emplace\u ba
std::vector<std::unique_ptr<Character>> characters;
characters.emplace_back(new Character("Character", 100));
在本例之后,编译(汇编视图)时是否有任何差异,或者这两种方法之间是否有不同的汇编指令 如果重要的话,
字符
是如何定义的?它是否可以复制,或者它是否有std::string
成员或其他什么。如果emplace\u back
引发异常(例如,无法分配足够的内存),则第一个版本将泄漏字符的实例,而第二个版本则不会。如果可以,请给出答案,除了手动处理异常(newcharacter(args)
)的大小写外,这样处理是否安全?如果有问题,如何定义Character
?它是否可以复制,或者它是否有std::string
成员或其他什么。如果emplace\u back
引发异常(例如,无法分配足够的内存),则第一个版本将泄漏字符的实例,而第二个版本则不会。如果可以,请给出答案,除了手动处理异常(newcharacter(args)
)的大小写外,这样处理安全吗?
std::vector<std::unique_ptr<Character>> characters;
characters.emplace_back(std::make_unique<Character> ("Character", 100));
class Character{
public:
Character(){
m_name="";
m_life=0;
}
Character(std::string name, int life):m_name(name), m_life(life){
position= new AdaptPosition{0,0};
}
virtual~Character(){delete position;}
void advance(int const& x, int const& y){
advancex(x);
advancey(y);
}
void advancex(int x){
position->advancedx(x);
}
void advancey(int y){
position->advancedy(y);
}
void getPosition(){
position->show();
}
friend std::ostream& operator<<(std::ostream& out, Character& character){
out << character.m_name << "With life :"<< character.m_life << " In position :"<< std::endl;
character.getPosition();
return out;
}
protected:
std::string m_name;
int m_life;
AdaptPosition *position;
};