Skip to content

Commit b526595

Browse files
authored
Merge pull request #503 from CesiumGS/ref-counted-impls
Reference counting and accidental copy prevention for Impl classes
2 parents 79b6285 + 22eb15f commit b526595

25 files changed

+103
-25
lines changed

Reinterop~/MethodsImplementedInCpp.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ public static void Generate(CppGenerationContext context, TypeToGenerate item, G
3333
#endif
3434
void* {{createName}}(void* handle) {
3535
const {{wrapperType.GetFullyQualifiedName()}} wrapper{{{objectHandleType.GetFullyQualifiedName()}}(handle)};
36-
return reinterpret_cast<void*>(new {{implType.GetFullyQualifiedName()}}(wrapper));
36+
auto pImpl = new {{implType.GetFullyQualifiedName()}}(wrapper);
37+
pImpl->addReference();
38+
return reinterpret_cast<void*>(pImpl);
3739
}
3840
""",
3941
TypeDefinitionsReferenced: new[]
@@ -68,7 +70,7 @@ private void CreateImplementation()
6870
#endif
6971
void {{destroyName}}(void* pImpl) {
7072
auto pImplTyped = reinterpret_cast<{{implType.GetFullyQualifiedName()}}*>(pImpl);
71-
delete pImplTyped;
73+
if (pImplTyped) pImplTyped->releaseReference();
7274
}
7375
""",
7476
TypeDefinitionsReferenced: new[]

native~/Editor/src/CesiumEditorWindowImpl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include "CesiumImpl.h"
4+
35
#include <DotNet/CesiumForUnity/Cesium3DTileset.h>
46
#include <DotNet/System/String.h>
57
#include <DotNet/UnityEngine/GameObject.h>
@@ -13,7 +15,7 @@ class CesiumEditorWindow;
1315

1416
namespace CesiumForUnityNative {
1517

16-
class CesiumEditorWindowImpl {
18+
class CesiumEditorWindowImpl : public CesiumImpl<CesiumEditorWindowImpl> {
1719

1820
public:
1921
CesiumEditorWindowImpl(

native~/Editor/src/CesiumIonSessionImpl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include "CesiumImpl.h"
4+
35
#include <CesiumAsync/AsyncSystem.h>
46
#include <CesiumAsync/IAssetAccessor.h>
57
#include <CesiumAsync/SharedFuture.h>
@@ -33,7 +35,7 @@ class Token;
3335
} // namespace CesiumIonClient
3436

3537
namespace CesiumForUnityNative {
36-
class CesiumIonSessionImpl {
38+
class CesiumIonSessionImpl : public CesiumImpl<CesiumIonSessionImpl> {
3739
public:
3840
CesiumIonSessionImpl(const DotNet::CesiumForUnity::CesiumIonSession& session);
3941
~CesiumIonSessionImpl();

native~/Editor/src/IonAssetsTreeViewImpl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include "CesiumImpl.h"
4+
35
#include <CesiumIonClient/Assets.h>
46

57
#include <DotNet/CesiumForUnity/IonAssetsColumn.h>
@@ -15,7 +17,7 @@ class IonAssetsTreeView;
1517

1618
namespace CesiumForUnityNative {
1719

18-
class IonAssetsTreeViewImpl {
20+
class IonAssetsTreeViewImpl : public CesiumImpl<IonAssetsTreeViewImpl> {
1921
public:
2022
IonAssetsTreeViewImpl(
2123
const DotNet::CesiumForUnity::IonAssetsTreeView& treeView);

native~/Editor/src/SelectIonTokenWindowImpl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include "CesiumImpl.h"
4+
35
#include <CesiumAsync/AsyncSystem.h>
46
#include <CesiumIonClient/Token.h>
57

@@ -17,7 +19,7 @@ class CesiumIonServer;
1719

1820
namespace CesiumForUnityNative {
1921

20-
class SelectIonTokenWindowImpl {
22+
class SelectIonTokenWindowImpl : public CesiumImpl<SelectIonTokenWindowImpl> {
2123

2224
public:
2325
static CesiumAsync::SharedFuture<std::optional<CesiumIonClient::Token>>

native~/Runtime/src/Cesium3DTilesetImpl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include "CesiumImpl.h"
4+
35
#include <Cesium3DTilesSelection/ViewUpdateResult.h>
46

57
#include <DotNet/CesiumForUnity/CesiumCreditSystem.h>
@@ -25,7 +27,7 @@ class Tileset;
2527

2628
namespace CesiumForUnityNative {
2729

28-
class Cesium3DTilesetImpl {
30+
class Cesium3DTilesetImpl : public CesiumImpl<Cesium3DTilesetImpl> {
2931
public:
3032
Cesium3DTilesetImpl(const DotNet::CesiumForUnity::Cesium3DTileset& tileset);
3133
~Cesium3DTilesetImpl();

native~/Runtime/src/CesiumBingMapsRasterOverlayImpl.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include "CesiumImpl.h"
4+
35
#include <CesiumUtility/IntrusivePointer.h>
46

57
namespace DotNet::CesiumForUnity {
@@ -13,7 +15,8 @@ class BingMapsRasterOverlay;
1315

1416
namespace CesiumForUnityNative {
1517

16-
class CesiumBingMapsRasterOverlayImpl {
18+
class CesiumBingMapsRasterOverlayImpl
19+
: public CesiumImpl<CesiumBingMapsRasterOverlayImpl> {
1720
public:
1821
CesiumBingMapsRasterOverlayImpl(
1922
const DotNet::CesiumForUnity::CesiumBingMapsRasterOverlay& overlay);

native~/Runtime/src/CesiumCreditSystemImpl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include "CesiumImpl.h"
4+
35
#include <CesiumUtility/CreditSystem.h>
46

57
#include <DotNet/CesiumForUnity/CesiumCredit.h>
@@ -21,7 +23,7 @@ struct Credit;
2123

2224
namespace CesiumForUnityNative {
2325

24-
class CesiumCreditSystemImpl {
26+
class CesiumCreditSystemImpl : public CesiumImpl<CesiumCreditSystemImpl> {
2527
public:
2628
CesiumCreditSystemImpl(
2729
const DotNet::CesiumForUnity::CesiumCreditSystem& creditSystem);

native~/Runtime/src/CesiumDebugColorizeTilesRasterOverlayImpl.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include "CesiumImpl.h"
4+
35
#include <CesiumUtility/IntrusivePointer.h>
46

57
namespace DotNet::CesiumForUnity {
@@ -13,7 +15,8 @@ class DebugColorizeTilesRasterOverlay;
1315

1416
namespace CesiumForUnityNative {
1517

16-
class CesiumDebugColorizeTilesRasterOverlayImpl {
18+
class CesiumDebugColorizeTilesRasterOverlayImpl
19+
: public CesiumImpl<CesiumDebugColorizeTilesRasterOverlayImpl> {
1720
public:
1821
CesiumDebugColorizeTilesRasterOverlayImpl(
1922
const DotNet::CesiumForUnity::CesiumDebugColorizeTilesRasterOverlay&

native~/Runtime/src/CesiumEllipsoidImpl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include "CesiumImpl.h"
4+
35
#include <CesiumGeospatial/Ellipsoid.h>
46

57
#include <DotNet/Unity/Mathematics/double3.h>
@@ -12,7 +14,7 @@ class CesiumEllipsoid;
1214

1315
namespace CesiumForUnityNative {
1416

15-
class CesiumEllipsoidImpl {
17+
class CesiumEllipsoidImpl : public CesiumImpl<CesiumEllipsoidImpl> {
1618
public:
1719
CesiumEllipsoidImpl(
1820
const DotNet::CesiumForUnity::CesiumEllipsoid& unityEllipsoid);

0 commit comments

Comments
 (0)