클래스의 복사 생성자가 삭제되면 클래스의 배열 멤버 초기화

레커

다음은 제가 작업중인 사용 사례의 작은 버전입니다.

#include <mutex>
template<typename T = float>
class Foo
{
public:
    Foo(int x, int y):m_mutex(){}
private:
    std::mutex  m_mutex; // This is must have in my project
};

typedef Foo<float> Foo_typedef;

class Func
{
public:     
    static Foo_typedef static_array[2];
};

Foo_typedef Func::static_array[2] = { Foo_typedef(2,3), Foo_typedef(2,3) };

int main()
{   
    return 0;
}

이 VS 2015 업데이트 2를 컴파일하면 다음 오류가 발생합니다.

error C2280: 'Foo<float>::Foo(const Foo<float> &)': attempting to reference a deleted function
note: see declaration of 'Foo<float>::Foo'

나는 주위를 둘러 보았고 이것이 두 가지 이유 중 하나가있을 것이라고 생각했다.

1)에 대한 복사 생성자 멤버 std::mutex가 삭제되었습니다.

2) 이것은 내가보고있는 것과 비슷할 것이라고 생각했습니다.

어떤거야? VS 2015 업데이트 2 컴파일러에서 발생한이 오류를 우회하려면 어떻게해야합니까?

UPDATE : 전달해야하는 일부 매개 변수를받는 생성자를 업데이트했습니다 Foo_typedef.

잡목 숲

생성자를 사용하여 요소를 제자리에 생성해야합니다.

Foo_typedef Func::static_array[2] = { {2, 3}, {2, 3} };

이를 통해 두 요소가 제자리에 구성되기 때문에 복사 또는 이동이 없습니다 .

표준은 다음과 같습니다 (§8.5.1 / 2 [dcl.init.aggr], 강조는 내 것임).

이니셜 라이저 목록에 의해 집계가 초기화되면 [...] 이니셜 라이저 목록의 요소가 집계 [...] 의 멤버에 대한 이니셜 라이저 로 간주됩니다 .

귀하의 경우 Foo_typedef(2,3)에는 이니셜 라이저 로 사용 Foo_typedef되므로 사본이 필요합니다. 내가 준 코드 {2, 3}에서 이니셜 라이저 로 사용되며 해당 생성자가 호출됩니다 (복사 없음).

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

클래스 내의 다른 멤버로 멤버 배열의 크기 초기화

분류에서Dev

클래스 배열의 멤버 제거

분류에서Dev

C ++ 클래스에서 사용자 정의 배열 초기화?

분류에서Dev

가변 클래스 템플릿 유형의 멤버 함수 결과로 배열 초기화?

분류에서Dev

디버그 어설 션이 사용자 입력에 의해 클래스 배열을 초기화하지 못함

분류에서Dev

복사 생성자를 사용할 때 복사 생성자 전에 클래스 데이터 멤버가 초기화됩니까?

분류에서Dev

생성자의 std :: istream에서 const 클래스 데이터 멤버 초기화

분류에서Dev

기본이 아닌 멤버 초기화의 복사 생성자

분류에서Dev

하위 클래스 생성자에서 부모 클래스의 개인 멤버를 초기화하는 방법

분류에서Dev

Base 클래스 생성자 호출과 Child 클래스의 멤버 변수 초기화

분류에서Dev

방법 : 적절한 기본 생성자없이 클래스의 인스턴스 복사 기본 생성자가없는 멤버가 있습니까?

분류에서Dev

복사를 금지하는 멤버 클래스 초기화

분류에서Dev

파생 클래스에서 전용 멤버에 액세스 할 수 없습니다 (생성자가 기본 클래스에 정의되어 있어도)

분류에서Dev

파생 클래스의 생성자 초기화 문제

분류에서Dev

C ++의 클래스 생성자에서 초기화 나열

분류에서Dev

유형 특성을 사용하여 클래스 템플릿의 정적 데이터 멤버를 초기화하려면 어떻게해야합니까?

분류에서Dev

클래스의 데이터 멤버가 0으로 초기화되는 원인은 무엇입니까?

분류에서Dev

클래스의 부울 멤버 변수가 초기화되지 않은 경우 True로 설정됩니다.

분류에서Dev

부모 클래스에서 사용되는 자식 클래스의 속성 초기화

분류에서Dev

cdn 종속성이로드되기 전에 JS 클래스 정적 멤버 초기화가 발생합니다.

분류에서Dev

멤버 초기화가있는 클래스의 구현 파일 (.cpp)

분류에서Dev

C ++ 11에서 클래스 멤버 초기화가 제대로 수행됨

분류에서Dev

파생 클래스의 멤버 함수를 사용하는 기본 클래스에서 함수 호출

분류에서Dev

클래스 생성자에서 초기화 된 ofstream 유형의 멤버 변수를 사용할 수 있습니까?

분류에서Dev

C ++ 클래스의 생성자를 사용하여 char 배열에 기본값 제공

분류에서Dev

C ++ 클래스의 생성자를 사용하여 char 배열에 기본값 제공

분류에서Dev

사용자 정의 클래스 내에서 날짜를 초기화하면 "인스턴스 멤버를 유형에 사용할 수 없습니다."오류가 발생합니다.

분류에서Dev

외부 클래스의 생성자에서 사용되는 클래스의 인스턴스 만들기

분류에서Dev

Typescript : 생성자 서명 배열에서 인스턴스화하지 않고 클래스의 정적 멤버에 액세스

Related 관련 기사

  1. 1

    클래스 내의 다른 멤버로 멤버 배열의 크기 초기화

  2. 2

    클래스 배열의 멤버 제거

  3. 3

    C ++ 클래스에서 사용자 정의 배열 초기화?

  4. 4

    가변 클래스 템플릿 유형의 멤버 함수 결과로 배열 초기화?

  5. 5

    디버그 어설 션이 사용자 입력에 의해 클래스 배열을 초기화하지 못함

  6. 6

    복사 생성자를 사용할 때 복사 생성자 전에 클래스 데이터 멤버가 초기화됩니까?

  7. 7

    생성자의 std :: istream에서 const 클래스 데이터 멤버 초기화

  8. 8

    기본이 아닌 멤버 초기화의 복사 생성자

  9. 9

    하위 클래스 생성자에서 부모 클래스의 개인 멤버를 초기화하는 방법

  10. 10

    Base 클래스 생성자 호출과 Child 클래스의 멤버 변수 초기화

  11. 11

    방법 : 적절한 기본 생성자없이 클래스의 인스턴스 복사 기본 생성자가없는 멤버가 있습니까?

  12. 12

    복사를 금지하는 멤버 클래스 초기화

  13. 13

    파생 클래스에서 전용 멤버에 액세스 할 수 없습니다 (생성자가 기본 클래스에 정의되어 있어도)

  14. 14

    파생 클래스의 생성자 초기화 문제

  15. 15

    C ++의 클래스 생성자에서 초기화 나열

  16. 16

    유형 특성을 사용하여 클래스 템플릿의 정적 데이터 멤버를 초기화하려면 어떻게해야합니까?

  17. 17

    클래스의 데이터 멤버가 0으로 초기화되는 원인은 무엇입니까?

  18. 18

    클래스의 부울 멤버 변수가 초기화되지 않은 경우 True로 설정됩니다.

  19. 19

    부모 클래스에서 사용되는 자식 클래스의 속성 초기화

  20. 20

    cdn 종속성이로드되기 전에 JS 클래스 정적 멤버 초기화가 발생합니다.

  21. 21

    멤버 초기화가있는 클래스의 구현 파일 (.cpp)

  22. 22

    C ++ 11에서 클래스 멤버 초기화가 제대로 수행됨

  23. 23

    파생 클래스의 멤버 함수를 사용하는 기본 클래스에서 함수 호출

  24. 24

    클래스 생성자에서 초기화 된 ofstream 유형의 멤버 변수를 사용할 수 있습니까?

  25. 25

    C ++ 클래스의 생성자를 사용하여 char 배열에 기본값 제공

  26. 26

    C ++ 클래스의 생성자를 사용하여 char 배열에 기본값 제공

  27. 27

    사용자 정의 클래스 내에서 날짜를 초기화하면 "인스턴스 멤버를 유형에 사용할 수 없습니다."오류가 발생합니다.

  28. 28

    외부 클래스의 생성자에서 사용되는 클래스의 인스턴스 만들기

  29. 29

    Typescript : 생성자 서명 배열에서 인스턴스화하지 않고 클래스의 정적 멤버에 액세스

뜨겁다태그

보관