
Samuel, I don't see any explicit reference to scoped_ptr in your code, so assuming you are trying to use std::vector<boost::scoped_ptr<X> >. This doesn't work since, quoting documentations, "It has been suggested that scoped_ptr<T> is equivalent to std::auto_ptr<T> const." Using shared_ptr instead might or might not fit your needs, depending on whether you are OK with cost of reference counting. Best, -- Nikolai
Hi Samuel,
Assuming m_textureUnits is a std::vector, have you tried to use m_textureUnits.reserve instead of resize ? I think that could solve your issue. Then you might also want to consider to use m_textureUnits.push_back instead of m_textureUnits[i].
Kind regards
Rune
On Tue, Apr 21, 2009 at 12:05 PM, Space Ship Traveller < space.ship.traveller@gmail.com> wrote:
Hi, I want to use scoped_ptr with std::vector or scoped_array, but the problem is that the type I want to allocate has a non-trivial constructor.
What is the standard way to make this work? My current best guess is to use std::vector with boost::scoped_ptr in the following way:
TextureUnitsController::TextureUnitsController () { GLint textureUnitCount = 1; glGetIntegerv(GL_MAX_TEXTURE_UNITS, &textureUnitCount);
m_textureUnits.resize(textureUnitCount);
for (unsigned i = 0; i < textureUnitCount; i += 1) { m_textureUnits[i].reset(new TextureUnit(GL_TEXTURE0 + i)); }
std::cerr << "Found " << textureUnitCount << " texture units..." << std:: endl; }
But this doesn't work because scoped_ptr also has a non-trivial constructor, so resize fails.
Thanks Samuel
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users