C++emplaceback 및 사용 오류

2370 단어 C++emplace back
오늘 c++primer 문 제 를 풀 어 표준 라 이브 러 리 vector,emplaceback 갑자기 내 가 그것 에 대해 아 는 것 이 매우 적다 는 것 을 알 게 되 었 다.우선,나 는 인터넷 에서 답 의 코드 를 찾 았 다.전에 emplace 를 알 고 있 었 다.back 은 이동 구조 함 수 를 통 해 이 루어 진 것 입 니 다.그러면 문제 가 발생 했 습 니 다.만약 에 제 가 vectorb 를 실현 하고 싶다 면 이동 구조 함 수 를 명시 적 으로 삭제 하 겠 습 니 다.
b.emplace_back(...),일 할 수 있 을까요?네,맛 없어 요.

//Base.h
#include<string>
class Base
{
public:
Base() = default;
Base(std::string t,int m):s(t),i(m){}
Base(const Base& b):s(b.s),i(b.i){}
Base(Base&&) = delete;
private:
std::string s;
int i;
};
이것 은 우리 의 기대 에 부합 되 는 것 같 습 니 다.그러나 제 가 사용자 정의 버 전 을 사용 하려 고 시도 할 때(즉,인터넷 의'고수'들 입 니까?아니면 외국인 들 이 github 에 두 었 습 니까?하하,저 를 이렇게 오래 찾 게 한 이 유 는 구덩이 가 아 닙 니까?)사용자 정의 버 전 은 다음 과 같 습 니 다.

template<typename T>
template<class ...Args>
void
Vec<T>::emplace_back(Args&& ...args)
{
chk_n_alloc();
alloc.construct(first_free++, std::forward<Args>(args)...);
}
보충 지식:C++11 새로운 기능,emplace 사용 추천back()push 교체back()의 이유
c++11 에 emplace 새로 가입back()push 바 꾸 기back():
평소에 저희 습관 적 인 꼬리 삽입 용 pushback()완성 하 러 갑 니 다.하지만 임시 대상 을 끼 워 넣 으 면 pushback()임시 대상 을 만 들 고 용기 의 끝 에 복사 해 야 합 니 다.emplaceback()은 용기 의 말미 구조 대상 에 직접 있어 복사 과정 을 줄 였 다.
다음 코드 분석:

#include<bits/stdc++.h>
using namespace std;
int i=0,j=0;
class A {
public:
  A(int i){
    str = to_string(i);
    cout << "    " <<++i<< endl; 
  }
  ~A(){}
  A(const A& a): str(a.str){
    cout << "    " <<++j<< endl;
  }
 
public:
  string str;
};
 
int main(){
  vector<A> vec;
  vec.reserve(10);//  capacity
  for(int i=0;i<10;i++){
    vec.push_back(i); //   10      10       ,
//    vec.emplace_back(i); //   10                   
  }
}


이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.잘못 이 있 거나 완전히 고려 되 지 않 은 곳 이 있 으 면 댓 글 토론 을 환영 합 니 다.아 낌 없 는 가르침 을 바 랍 니 다.

좋은 웹페이지 즐겨찾기