Potrei aver capito male, ma credo che lui voglia utilizzare un solo smart pointer dichiarato all'esterno dal for e non sa come fare, dato che:

codice:
m_smartptr X = new X() // X di tipo m_smartptr
non funziona.

Se così fosse, devi controllare l'interfaccia dello smartptr. Ad esempio, per le boost:

codice:
#include <iostream>
#include <boost/scoped_ptr.hpp>

using namespace boost;
using namespace std;

class T
{
	public:
		T(int x) : x_(x) { cout << "T::T(int)" << endl; }
		~T() { cout << "T::~T()" << endl; }	
		int getX(){ return this->x_; }
	private:
		int x_;
};

int main()
{
	scoped_ptr<T> ptr;
	
	for(int i = 0; i < 10; i++)
	{
		ptr.reset(new T(i));
		cout << "Val: " << ptr->getX() << endl; 
	}
}
Scusate se invece ho capito male la domanda.