Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在汇编中,std::vector::emplace_back(新T(args))和std::vector::emplace_back(std::make_unique<;T>;(args))之间有什么区别?_C++_Assembly_Smart Pointers - Fatal编程技术网

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;


};