Which is more accurate? Accurate for what purpose?
For ATC and aircraft collision with each other purposes, indicated altitude is used. Indicated altitude is not "accurate" with respect to your true MSL altitude except for very near the altimeter setting reporting point. The higher above the point you are, or the further away, the less accurate it is compared to true altitude. That is why instrument approaches in cold, generally mountainous states have temperature correction limits - because some segments are high enough above the station that the errors can be quite large.
But for ATC purposes with everybody on the same altimeter setting, indicated altitude is pretty accurate, relative to other airplanes. And that's its purpose.
GPS altitude, however, is not affected by temperature and pressure, and is generally pretty accurate as a true altitude, especially with WAAS. Meaning that if a mountain is 5000 feet MSL, and you fly at it at 5000 GPS altitude, you are probably going to hit it right at the top.
In my day job, I actually fly true altitudes all the time. Heck, I did it multiple times today. As we are certifying radio signals, we want to do that at a constant true altitude, not an indicated altitude that would vary each time we come by. So we use GPS altitude for this. For one test today we wanted to be at 8000, which ended up being 7800 indicated. A little later, we wanted to be at 6300, which was 6200 indicated. Later we wanted 16000, which was 15,600 indicated. Generally the difference between the two increases as altitude increases, and specifically height above the reporting station (the airport). This work today was all in Colorado, so our field elevations were 4500 feet and higher.