自動分配記憶體大小的工具

什麼事都自己來!

看到一個挺有趣的code,可以自動分配記憶體大小,還有可隨時變動大小:

template <class T>class Z
{
private:
	T* m_space;
	size_t m_size;

public:
	Z(size_t size = 0)
	{
		if (size == 0)
			size = 1;
		m_space = new T[size];
		memset(m_space, 0, size * sizeof(T));
		m_size = size;
	}
	~Z() 
	{ 
		delete[] m_space; 
	}

	operator T*()
	{
		return m_space;
	}

	size_t GetMemSize()
	{
		return m_size * sizeof(T);
	}

	size_t GetSize()
	{
		return m_size;
	}

	void _clear()
	{
		memset(m_space, 0, m_size * sizeof(T));
	}

	void Resize(size_t new_size)
	{
		if (new_size == m_size)
			return; // same size

		// Create buffer to store existing data
		T* new_space = new T[new_size];
		size_t new_space_mem_size = new_size * sizeof(T);
		memset((void*)new_space, 0, new_space_mem_size);

		if (m_size < new_size)
			// we created a larger data structure
			memcpy((void*)new_space,m_space,m_size * sizeof(T));
		else
			// we created a smaller data structure
			memcpy((void*)new_space,m_space,new_size * sizeof(T));
		delete[] m_space;
		m_space = new_space;
		m_size = new_size;
	}

	void AddResize(size_t More)
	{
		Resize(m_size + More);
	}
};

使用的時候:

	Z<char> XD(10);
	sprintf_s(XD, 10, "Test\n");
	printf_s("%c", XD[0]);
	printf_s("%s", XD);

還有其他的運用就是,挺好玩的~