Bạn có hai giải pháp ở đây:
- Không xóa xóa nó (bạn đang ở trong C++, bạn sử dụng mới và xóa, phải không;?)) . Hầu như tất cả các hệ điều hành ngày hôm nay sẽ "miễn phí" bộ nhớ được phân bổ bởi ứng dụng nào một khi nó đã hoàn thành. Nhưng đó không phải là một giải pháp tốt, mà làm cho bộ nhớ rò rỉ khó phát hiện ví dụ.
- Đóng gói con trỏ của bạn vào một lớp (làm thành viên), sau đó sử dụng lớp này làm loại tĩnh của bạn. Bằng cách đó, bạn biết destructor lớp sẽ được gọi vào cuối ứng dụng. Sau đó bạn chỉ cần xóa dữ liệu của bạn trong destructor và công việc được thực hiện và làm sạch. Đó là sức mạnh của RAII.
Tôi đề nghị bạn làm 2, đó là một cách thực sự sạch sẽ để làm điều đó.
Đây là ví dụ đơn giản. Thay vì làm điều này
static Thing* things = new Thing(); // or whatever way to initialize, here or in a specific function
Bạn sẽ làm điều đó:
class ThingManager // or whatever name you like
{
public:
ThingManager(Thing* thing) : m_thing(thing) { }//or create it here? whatever solution suits your way of creating the data
~ThingManager() { delete m_thing; } // THAT's the important part!
Thing* instance() const { return m_thing; } // or whatever accessor you need, if you need one
private:
Thing* m_thing;
};
và sau đó
static ManagedThing thing; // now i can access it via thing.instance()
Khi chương trình kết thúc, các biến tĩnh (mà không phải là con trỏ nữa) sẽ bị hủy diệt và nó sẽ được gọi để làm điều đó.
Nó được viết chỉ để cung cấp cho bạn một ý tưởng về cách bạn có thể làm điều đó.
SOunds như bạn đang cố gắng tái tạo lại con trỏ thông minh? –
Vấn đề này là một trong những vấn đề xảy ra khi triển khai thực đơn (http://en.wikipedia.org/wiki/Singleton_pattern). Mẫu mã của @ Klaim dưới đây là ví dụ về một mẫu. Chúng có thể là một điều tốt hoặc nạng. Đừng lạm dụng chúng. :) – Void