Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7935969
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 3, 20262026-06-03T22:04:29+00:00 2026-06-03T22:04:29+00:00

For my current project I am using a boost::ptr_vector to hold Objects polymorphically, and

  • 0

For my current project I am using a boost::ptr_vector to hold Objects polymorphically, and it was all working fine until one of my builds VS2010 throw that it could not clone the object so I went, and looked up cloning, and implemented the new_clone() method as requested by boost, and followed the c++ FAQ made it pure virtual, but now VS2010 is throwing this shanagin at me saying that it cannot use clone on an abstract class.

1>c:\program files\boost\boost_1_49_0\boost\ptr_container\clone_allocator.hpp(34): error C2259: 'Object' : cannot instantiate abstract class
1>          due to following members:
1>          'Object *Object::new_clone(void) const' : is abstract
1>          c:\...\Object.h(36) : see declaration of 'Object::new_clone'
1>          c:\program files\boost\boost_1_49_0\boost\ptr_container\clone_allocator.hpp(68) : see reference to function template instantiation 'T *boost::new_clone<U>(const T &)' being compiled
1>          with
1>          [
1>              T=Object,
1>              U=Object
1>          ]
1>          c:\program files\boost\boost_1_49_0\boost\ptr_container\detail\reversible_ptr_container.hpp(110) : see reference to function template instantiation 'U *boost::heap_clone_allocator::allocate_clone<Object>(const U &)' being compiled
1>          with
1>          [
1>              U=Object
1>          ]
1>          c:\program files\boost\boost_1_49_0\boost\ptr_container\detail\reversible_ptr_container.hpp(99) : while compiling class template member function 'Object *boost::ptr_container_detail::reversible_ptr_container<Config,CloneAllocator>::null_clone_allocator<allow_null_values>::allocate_clone(const Object *)'
1>          with
1>          [
1>              Config=boost::ptr_container_detail::sequence_config<Object,std::vector<void *,std::allocator<void *>>>,
1>              CloneAllocator=boost::heap_clone_allocator,
1>              allow_null_values=false
1>          ]
1>          c:\program files\boost\boost_1_49_0\boost\ptr_container\detail\reversible_ptr_container.hpp(276) : see reference to class template instantiation 'boost::ptr_container_detail::reversible_ptr_container<Config,CloneAllocator>::null_clone_allocator<allow_null_values>' being compiled
1>          with
1>          [
1>              Config=boost::ptr_container_detail::sequence_config<Object,std::vector<void *,std::allocator<void *>>>,
1>              CloneAllocator=boost::heap_clone_allocator,
1>              allow_null_values=false
1>          ]
1>          c:\program files\boost\boost_1_49_0\boost\ptr_container\detail\reversible_ptr_container.hpp(275) : while compiling class template member function 'void boost::ptr_container_detail::reversible_ptr_container<Config,CloneAllocator>::null_policy_deallocate_clone(const Object *)'
1>          with
1>          [
1>              Config=boost::ptr_container_detail::sequence_config<Object,std::vector<void *,std::allocator<void *>>>,
1>              CloneAllocator=boost::heap_clone_allocator
1>          ]
1>          c:\program files\boost\boost_1_49_0\boost\ptr_container\ptr_sequence_adapter.hpp(132) : see reference to class template instantiation 'boost::ptr_container_detail::reversible_ptr_container<Config,CloneAllocator>' being compiled
1>          with
1>          [
1>              Config=boost::ptr_container_detail::sequence_config<Object,std::vector<void *,std::allocator<void *>>>,
1>              CloneAllocator=boost::heap_clone_allocator
1>          ]
1>          c:\program files\boost\boost_1_49_0\boost\ptr_container\ptr_vector.hpp(35) : see reference to class template instantiation 'boost::ptr_sequence_adapter<T,VoidPtrSeq,CloneAllocator>' being compiled
1>          with
1>          [
1>              T=Object,
1>              VoidPtrSeq=std::vector<void *,std::allocator<void *>>,
1>              CloneAllocator=boost::heap_clone_allocator
1>          ]
1>          c:\general\dev\senior\tankbattle3d\tankbattle3d\tankbattle3d\room.h(28) : see reference to class template instantiation 'boost::ptr_vector<T>' being compiled
1>          with
1>          [
1>              T=Object
1>          ]

Does this mean that in order to have boost be able to clone things I have to throw abstract base class away?


NOTES:

  • At no time should an object of the abstract base class ever exist in the program, but almost everything will be treated as such.
  • When I make the clone method non-virtual, and give it the means to actually return something (providing a constructor/copy constructor which would mean that they could exist which goes against design) then the compiler throws that all of the dirived classes need a default constructor. which not having them is by design.

EDIT: I do not implement a delete_clone() (was unaware that that was explicitly required, and I think that the destructor will do fine)

class Object{
public :
    ObjectType  superType;
    bool toBeRemoved;
    virtual void performAction(int action, Object& source){}
    virtual void updateObject(float duration){}
    virtual ~Object(){}
    virtual Object * new_clone(void)const = 0;      // Object.h[36]
    bool operator==(const Object& _other)const;
    bool operator!=(const Object& _other)const;
};
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-03T22:04:30+00:00Added an answer on June 3, 2026 at 10:04 pm

    What you want is a free-standing (non-member) new_clone() function that will get picked up by the compiler in preference to the one in Boost’s clone_allocator.hpp:

    class Object{
    public :
        ObjectType  superType;
        bool toBeRemoved;
        virtual void performAction(int action, Object& source){}
        virtual void updateObject(float duration){}
        virtual ~Object(){}
        bool operator==(const Object& _other)const;
        bool operator!=(const Object& _other)const;
    
    private:
        virtual Object * do_clone() const = 0;
    };
    
    // in the same namespace as `class Object`:
    //  so it will get picked up instead of Boost's default 
    //  implementation
    
    inline
    Object* new_clone( const Object& o)
    {
        return o.do_clone();
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

for my current project I am using Castle's ActiveRecord in C#. For one of
My current project is using the IDesign architecture, so all of my layers are
I'm currently working on a project using the current if statement and i'm sure
In my current project I am using boost::shared_ptr quite extensively. Recently my fellow team
The current project i am working on is extensively using web services and is
The current project in wherein I'm working creates a log file using the log4j
My current project involves using LDAP (Active Directory) and I'm using issue tracking for
I've used Trac/Subversion before and really like the integration. My current project is using
For a current project we are using SwfObject 2.2 to embed flash files, and
in our current project we are using ADO.NET Entity Framework as data layer for

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.