0. Build Error
SceneView.cpp
C:\Users\Winteradio\Desktop\Project\Game-Engine\external\Container\include\DynamicArray.h(366,27): error C2280: 'wtr::SceneView::SceneView(const wtr::SceneView &)': 삭제된 함수를 참조하려고 합니다. [C:\Users\Winteradio\
Desktop\Project\Game-Engine\build\GameEngine.vcxproj]
(소스 파일 '../Engine/Private/Framework/FrameView.cpp'을(를) 컴파일하는 중)
C:\Users\Winteradio\Desktop\Project\Game-Engine\Engine\Private\Framework\SceneView.h(44,2):
컴파일러에서 여기에 'wtr::SceneView::SceneView'을(를) 생성했습니다.
C:\Users\Winteradio\Desktop\Project\Game-Engine\Engine\Private\Framework\SceneView.h(44,2):
'wtr::SceneView::SceneView(const wtr::SceneView &)': 데이터 멤버이(가) 삭제되거나 액세스할 수 없는 'wtr::ProxyList<wtr::MeshProxy>::ProxyList(const wtr::ProxyList<wtr::MeshProxy> &)' 함수를 호출하므로 함수가 암시적으로 삭제되었습니다.
C:\Users\Winteradio\Desktop\Project\Game-Engine\Engine\Private\Renderer\Proxy\ProxyList.h(58,1):
'wtr::ProxyList<wtr::MeshProxy>::ProxyList(const wtr::ProxyList<wtr::MeshProxy> &)': 기본 클래스이(가) 삭제되거나 액세스할 수 없는 'wtr::CommandList<ProxyBase>::CommandList(const wtr::CommandList<ProxyBase> &)' 함수를 호출하
므로 함수가 암시적으로 삭제되었습니다.
with
[
ProxyBase=wtr::MeshProxy
]
C:\Users\Winteradio\Desktop\Project\Game-Engine\Engine\Private\Framework\CommandList.h(44,1):
'wtr::CommandList<ProxyBase>::CommandList(const wtr::CommandList<ProxyBase> &)': 데이터 멤버이(가) 삭제되거나 액세스할 수 없는 'wtr::LinearArena::LinearArena(const wtr::LinearArena &)' 함수를 호출하므로 함수가 암시적으로 삭제되었습니다.
with
[
ProxyBase=wtr::MeshProxy
]
C:\Users\Winteradio\Desktop\Project\Game-Engine\external\Container\include\LinearArena.h(57,3):
'wtr::LinearArena::LinearArena(const wtr::LinearArena &)': 함수가 명시적으로 삭제되었습니다.
1. Issue Overview
FrameView에서 SceneView를 DynamicArray에 추가하려고 할 때,
컴파일러가 삭제된 복사 생성자를 참조하려고 시도하면서 C2280 에러가 발생
이 오류는 객체의 복사가 금지된 하위 멤버로부터 발생한 연쇄적인 암시적 삭제(Implicit Deletion)가 원인
2. Technical Root Cause
오류의 근본 원인은 렌더링 리소스를 관리하는 **LinearArena**의 설계에 있음
- Deleted Copy Constructor:
LinearArena는 이중 메모리 해제 방지 및 리소스 독점권 보장을 위해 복사 생성자가 delete 되어 있음
- Propagation of Deletion:
LinearArena를 멤버로 포함하는 CommandList, ProxyList, 그리고 최종적으로 SceneView까지 복사 생성자가 컴파일 타임에 자동으로 삭제되어있음
- Container Constraint:
DynamicArray<T>에 객체를 PushBack하거나 내부 재배치(Reallocation)가 일어날 때, 객체의 **복사(Copy)**가 발생해야 하지만 SceneView는 복사가 불가능한 상태였으므로 컴파일 에러가 발생
3. Resolution: Reference Counting (RefCounted) Strategy
단순히 std::move를 사용하는 것만으로는 메모리 정렬(Alignment) 및 무거운 Arena 객체의 이동 비용 문제를 완벽히 해결할 수 없다고 판단하여,
**객체의 주소 고정(Pinning)**과 **공유 소유권(Shared Ownership)**을 보장하는 RefCounted 방식으로 구조를 개선
Key Changes
- Value to Reference Semantics:
DynamicArray<SceneView> (Value 기반) 구조를 포인터 기반의 참조 관리 방식으로 변경
- Safe Resource Management:
SceneView를 RefCounted 객체로 정의하여, 여러 시스템(Renderer, Scene, Frame)이 안전하게 해당 View를 참조할 수 있도록 수정
0. Build Error
1. Issue Overview
FrameView에서SceneView를DynamicArray에 추가하려고 할 때,컴파일러가 삭제된 복사 생성자를 참조하려고 시도하면서 C2280 에러가 발생
이 오류는 객체의 복사가 금지된 하위 멤버로부터 발생한 연쇄적인 암시적 삭제(Implicit Deletion)가 원인
2. Technical Root Cause
오류의 근본 원인은 렌더링 리소스를 관리하는 **
LinearArena**의 설계에 있음LinearArena는 이중 메모리 해제 방지 및 리소스 독점권 보장을 위해 복사 생성자가delete되어 있음LinearArena를 멤버로 포함하는CommandList,ProxyList, 그리고 최종적으로SceneView까지 복사 생성자가 컴파일 타임에 자동으로 삭제되어있음DynamicArray<T>에 객체를PushBack하거나 내부 재배치(Reallocation)가 일어날 때, 객체의 **복사(Copy)**가 발생해야 하지만SceneView는 복사가 불가능한 상태였으므로 컴파일 에러가 발생3. Resolution: Reference Counting (RefCounted) Strategy
단순히
std::move를 사용하는 것만으로는 메모리 정렬(Alignment) 및 무거운 Arena 객체의 이동 비용 문제를 완벽히 해결할 수 없다고 판단하여,**객체의 주소 고정(Pinning)**과 **공유 소유권(Shared Ownership)**을 보장하는
RefCounted방식으로 구조를 개선Key Changes
DynamicArray<SceneView>(Value 기반) 구조를 포인터 기반의 참조 관리 방식으로 변경SceneView를RefCounted객체로 정의하여, 여러 시스템(Renderer, Scene, Frame)이 안전하게 해당 View를 참조할 수 있도록 수정