은 다음 클래스를 고려적절한 개체 폐기
public ref class Workspace
{
protected:
Form^ WorkspaceUI;
SplitContainer^ WorkspaceSplitter;
AvalonEditTextEditor^ TextEditor;
ScriptOffsetViewer^ OffsetViewer;
SimpleTextViewer^ PreprocessedTextViewer;
ListView^ MessageList;
ListView^ FindList;
ListView^ BookmarkList;
ListView^ VariableIndexList;
TextBox^ VariableIndexEditBox;
Label^ SpoilerText;
ToolStrip^ WorkspaceMainToolBar;
ToolStripButton^ ToolBarNewScript;
ToolStripButton^ ToolBarOpenScript;
ToolStripButton^ ToolBarPreviousScript;
ToolStripButton^ ToolBarNextScript;
ToolStripSplitButton^ ToolBarSaveScript;
ToolStripDropDown^ ToolBarSaveScriptDropDown;
ToolStripButton^ ToolBarSaveScriptNoCompile;
ToolStripButton^ ToolBarSaveScriptAndPlugin;
ToolStripButton^ ToolBarRecompileScripts;
ToolStripButton^ ToolBarCompileDependencies;
ToolStripButton^ ToolBarDeleteScript;
ToolStripButton^ ToolBarNavigationBack;
ToolStripButton^ ToolBarNavigationForward;
ToolStripButton^ ToolBarSaveAll;
ToolStripButton^ ToolBarOptions;
ArbitraryCustomClass^ CustomClassInstance;
public:
Workspace()
{
WorkspaceUI = gcnew Form();
WorkspaceSplitter = gcnew SplitContainer();
// ...
Form->Controls->Add(WorkspaceSplitter);
// ...
WorkspaceUI->Show();
}
~Workspace
{
// dispose stuff here
}
};
메모리 모두가 GC 회수되도록 위의 클래스의 인스턴스를 처리 할 수있는 가장 효율적이고 우아한 방법이 될 것입니다 무엇 다음 컬렉션 중에? 각 회원에게 명시 적으로 전화를 걸거나 nullptr으로 재설정해야합니까?
그런 경우 개체를 처리해야하는 함수에 개체를 전달하는 방법은 무엇입니까? 마찬가지로 : Label SomeText; Form.Controls-> Add (SomeText); // 컴파일러 오류가 발생합니다 – shadeMe
또한 위 클래스의 생성 및 제거가 계속되면 System.OutOfMemoryException이 발생합니다. - GC가 객체의 메모리를 회수하지 않는 것 같습니다. 이것은 과거의 파멸에 대한 강한 언급을 가지고 있다고 믿게합니다. 내 코드에서는 모든 클래스의 인스턴스가 할당되어 목록에 직접 추가됩니다. 파기되면 인스턴스가 인스턴스에서 제거됩니다. 이것이 각 인스턴스가 루트에서 얻는 유일한 참조입니다. 그러나 클래스의 여러 멤버가 만든 여러 개의 내부 참조가 있습니다. – shadeMe
@shadeMe : 모든 소유 객체의 폐기를 시작하려면'Workspace' 객체 자체에서'Dispose '를 호출해야합니다. –