注意,注意,weak_ptr有坑

class Test
{
public:
	Test()
	{
		cout << "构造函数\n";
	}

	~Test()
	{
		cout << "析构函数\n";
	}
};
void *operator new(size_t nsize)
{
	void *ptmp = std::malloc(nsize);
	printf("申请内存:%d,%p\n",nsize, ptmp);
	return ptmp;
}

void operator delete(void *p)
{
	printf("释放内存:%p\n",p);

	std::free(p);
}
int main()
{
	cout << "start\n";
	{

		std::weak_ptr<Test> wp;

		{
			std::shared_ptr<Test> pInt(new Test);
			wp = pInt;
		}
	
		cout << "----------1------------\n";
		if (wp.expired())
		{
			cout << "不可用\n";
		}	
		cout << wp.use_count() << endl;
		cout << "----------2------------\n";
	}
	cout << "end\n";
	system("pause");
	return 0;
}

结果:
注意,注意,weak_ptr有坑_第1张图片

int main()
{
	cout << "start\n";
	{

		std::weak_ptr<Test> wp;

		{
			std::shared_ptr<Test> pInt(new Test);
			wp = pInt;
		}
	
		cout << "----------1------------\n";
		if (wp.expired())
		{
			cout << "不可用\n";
		}	
		cout << wp.use_count() << endl;
		wp.reset();
		cout << "----------2------------\n";
	}
	cout << "end\n";
	system("pause");
	return 0;
}

注意,注意,weak_ptr有坑_第2张图片

你可能感兴趣的:(C/C++基础,c++)