이전에 비슷한 질문을했지만 더 자세히 설명하고 싶습니다. 내가 직면 한 문제는 복사 할 수없는 개체가 포함 된 개체가 있고 누군가 내 인터페이스를 사용하려고 할 때 잘 사용하지 않으면 (개체의 복사 생성자를 사용하려고 시도 할 때) 컴파일 오류가 발생합니다. 그의 실제 코드가 아니라 객체를 가리 킵니다. 두 가지 질문은 다음과 같습니다. 1. 원래 코드 줄로 가리킬 수 있습니까? 2. 내가 할 수 없다면 누군가가 실제로 복사를 사용하려고 시도 할 때만 발생하는 static_assert를 넣을 수 있습니다 (몇 가지 시도해 봤지만 누군가 사용하지 않아도 얻을 수 있습니다 ..). .복사 할 수없는 개체가 포함 된 개체에 대한 컴파일 경고를 읽을 수 없습니다.
내가 이해할 수 없을 경우에 대비해 샘플 코드와 컴파일 오류를 추가하고 있습니다 ... 마지막 컴파일 오류가 ObjectHolder를 가리키고 있습니다. h. 파일 .. 메인을 가리키고 싶을 때 고마워요!
*은 이름을 바꿀 때 실수였습니다. 실제로 컴파일 오류를 생성 한 코드입니다. 와의 난 그냥 제공되는 코드를 반영하지 않습니다 공급
class NonCopyableObject
{
public:
virtual ~NonCopyableObject() {}
NonCopyableObject(int i) { m_index = i;}
int m_index;
private:
NonCopyableObject(const NonCopyableObject& other) {}
};
class ObjectHolder
{
public:
virtual ~ObjectHolder();
ObjectHolder(int i) : obj(i) {}
NonCopyableObject obj;
};
void main()
{
ObjectHolder first(1);
ObjectHolder second(first);
}
1>------ Build started: Project: tester, Configuration: Debug Win32 ------
1> main.cpp
1>d:\users\someone\documents\visual studio 2012\projects\tester\tester\objectholder.h(13): error C2248: 'NonCopyableObject::NonCopyableObject' : cannot access private member declared in class 'NonCopyableObject'
1> d:\users\someone\documents\visual studio 2012\projects\tester\tester\noncopyableobject.h(15) : see declaration of 'NonCopyableObject::NonCopyableObject'
1> d:\users\someone\documents\visual studio 2012\projects\tester\tester\noncopyableobject.h(8) : see declaration of 'NonCopyableObject'
1> This diagnostic occurred in the compiler generated function 'ObjectHolder::ObjectHolder(const ObjectHolder &)'
ObjectHolder에서도 복사 생성자를 숨기려고합니다. –
여기는 컴파일 오류가 발생한 실제 코드가 아닌 것이 확실합니다. – Nawaz
개체에 액세스 가능한 복사본 생성자가 없도록하려면 'private'(또는 C++ 11에서는'delete')로 만듭니다. –