在main函数中,你尝试使用delete关键字删除了ptr1指针,并且之后又调用了ptr1指针的成员函数destory()。这是错误的操作,因为在destory()函数中已经删除了m_ptr指针的内存,所以再次使用ptr1指针是未定义行为,会导致程序崩溃。

此外,在getSingle()函数中,你在创建Single对象之后,没有为m_ptr指针赋值。正确的操作应该是将新创建的对象地址赋给m_ptr指针。

修正后的代码如下:

#include <iostream>

using namespace std;

class Single
{
public:
	static Single* getSingle() {
		if (nullptr == m_ptr) {
			// lock    //瑙e喅澶氱嚎绋嬪畨鍏ㄩ棶棰?
			// if(nullptr == ptr)
			m_ptr = new Single;
		}
		return m_ptr;
	}
	void show() {
		cout << "show" << endl;
	}
	void destory()
	{
		delete m_ptr;
	}
private:
	Single(const Single& obj) = delete;
	Single() {
		cout << "Single" << endl;
	}
	~Single() {
		cout << "~Single" << endl;
	}
	static Single* m_ptr;
};

Single* Single::m_ptr = nullptr;

int main()
{
	Single* ptr1 = Single::getSingle();
	ptr1->show();
	ptr1->destory();
	
	Single* ptr2 = Single::getSingle();
	
	return 0;
}

注意,这里不再需要在析构函数中将m_ptr指针赋为nullptr,因为它是静态成员变量,程序结束时会自动销毁,不需要手动删除

#include iostreamusing namespace std;class Singlepublic	static Single getSingle 		if nullptr == m_ptr 			 lock 瑙e喅澶氱嚎绋嬪畨鍏ㄩ棶棰			 ifnullptr == ptr			m_ptr = new Single;				return m_ptr;		void show

原文地址: http://www.cveoy.top/t/topic/iR2j 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录