@@ -56,8 +56,8 @@ namespace class_loader
5656{
5757
5858typedef std::string LibraryPath;
59- typedef std::map<LibraryPath, class_loader::ClassLoader * > LibraryToClassLoaderMap;
60- typedef std::vector<ClassLoader * > ClassLoaderVector;
59+ typedef std::map<LibraryPath, std::shared_ptr< class_loader::ClassLoader> > LibraryToClassLoaderMap;
60+ typedef std::vector<std::shared_ptr< ClassLoader> > ClassLoaderVector;
6161
6262class MultiLibraryClassLoaderImpl ;
6363
@@ -96,7 +96,7 @@ class CLASS_LOADER_PUBLIC MultiLibraryClassLoader
9696 " class_loader::MultiLibraryClassLoader: "
9797 " Attempting to create instance of class type %s." ,
9898 class_name.c_str ());
99- ClassLoader * loader = getClassLoaderForClass<Base>(class_name);
99+ std::shared_ptr<class_loader:: ClassLoader> loader = getClassLoaderForClass<Base>(class_name);
100100 if (nullptr == loader) {
101101 throw class_loader::CreateClassException (
102102 " MultiLibraryClassLoader: Could not create object of class type " +
@@ -105,7 +105,7 @@ class CLASS_LOADER_PUBLIC MultiLibraryClassLoader
105105 " was explicitly loaded through MultiLibraryClassLoader::loadLibrary()" );
106106 }
107107
108- return loader->createInstance <Base>(class_name);
108+ return loader->createInstance <Base>(class_name, true );
109109 }
110110
111111 /* *
@@ -121,14 +121,14 @@ class CLASS_LOADER_PUBLIC MultiLibraryClassLoader
121121 std::shared_ptr<Base> createInstance (
122122 const std::string & class_name, const std::string & library_path)
123123 {
124- ClassLoader * loader = getClassLoaderForLibrary (library_path);
124+ std::shared_ptr<class_loader:: ClassLoader> loader = getClassLoaderForLibrary (library_path);
125125 if (nullptr == loader) {
126126 throw class_loader::NoClassLoaderExistsException (
127127 " Could not create instance as there is no ClassLoader in "
128128 " MultiLibraryClassLoader bound to library " + library_path +
129129 " Ensure you called MultiLibraryClassLoader::loadLibrary()" );
130130 }
131- return loader->createInstance <Base>(class_name);
131+ return loader->createInstance <Base>(class_name, true );
132132 }
133133
134134 // / Creates an instance of an object of given class name with ancestor class Base
@@ -146,7 +146,7 @@ class CLASS_LOADER_PUBLIC MultiLibraryClassLoader
146146 CONSOLE_BRIDGE_logDebug (
147147 " class_loader::MultiLibraryClassLoader: Attempting to create instance of class type %s." ,
148148 class_name.c_str ());
149- ClassLoader * loader = getClassLoaderForClass<Base>(class_name);
149+ std::shared_ptr<class_loader:: ClassLoader> loader = getClassLoaderForClass<Base>(class_name);
150150 if (nullptr == loader) {
151151 throw class_loader::CreateClassException (
152152 " MultiLibraryClassLoader: Could not create object of class type " + class_name +
@@ -170,14 +170,14 @@ class CLASS_LOADER_PUBLIC MultiLibraryClassLoader
170170 ClassLoader::UniquePtr<Base>
171171 createUniqueInstance (const std::string & class_name, const std::string & library_path)
172172 {
173- ClassLoader * loader = getClassLoaderForLibrary (library_path);
173+ std::shared_ptr<class_loader:: ClassLoader> loader = getClassLoaderForLibrary (library_path);
174174 if (nullptr == loader) {
175175 throw class_loader::NoClassLoaderExistsException (
176176 " Could not create instance as there is no ClassLoader in "
177177 " MultiLibraryClassLoader bound to library " + library_path +
178178 " Ensure you called MultiLibraryClassLoader::loadLibrary()" );
179179 }
180- return loader->createUniqueInstance <Base>(class_name);
180+ return loader->createUniqueInstance <Base>(class_name, true );
181181 }
182182
183183 /* *
@@ -193,7 +193,7 @@ class CLASS_LOADER_PUBLIC MultiLibraryClassLoader
193193 template <class Base >
194194 Base * createUnmanagedInstance (const std::string & class_name)
195195 {
196- ClassLoader * loader = getClassLoaderForClass<Base>(class_name);
196+ std::shared_ptr<class_loader:: ClassLoader> loader = getClassLoaderForClass<Base>(class_name);
197197 if (nullptr == loader) {
198198 throw class_loader::CreateClassException (
199199 " MultiLibraryClassLoader: Could not create class of type " + class_name);
@@ -213,7 +213,7 @@ class CLASS_LOADER_PUBLIC MultiLibraryClassLoader
213213 template <class Base >
214214 Base * createUnmanagedInstance (const std::string & class_name, const std::string & library_path)
215215 {
216- ClassLoader * loader = getClassLoaderForLibrary (library_path);
216+ std::shared_ptr<class_loader:: ClassLoader> loader = getClassLoaderForLibrary (library_path);
217217 if (nullptr == loader) {
218218 throw class_loader::NoClassLoaderExistsException (
219219 " Could not create instance as there is no ClassLoader in MultiLibraryClassLoader "
@@ -273,7 +273,7 @@ class CLASS_LOADER_PUBLIC MultiLibraryClassLoader
273273 template <class Base >
274274 std::vector<std::string> getAvailableClassesForLibrary (const std::string & library_path)
275275 {
276- ClassLoader * loader = getClassLoaderForLibrary (library_path);
276+ std::shared_ptr<class_loader:: ClassLoader> loader = getClassLoaderForLibrary (library_path);
277277 if (nullptr == loader) {
278278 throw class_loader::NoClassLoaderExistsException (
279279 " There is no ClassLoader in MultiLibraryClassLoader bound to library " +
@@ -321,15 +321,15 @@ class CLASS_LOADER_PUBLIC MultiLibraryClassLoader
321321 * @param library_path - the library from which we want to create the plugin
322322 * @return A pointer to the ClassLoader*, == nullptr if not found
323323 */
324- ClassLoader * getClassLoaderForLibrary (const std::string & library_path);
324+ std::shared_ptr<class_loader:: ClassLoader> getClassLoaderForLibrary (const std::string & library_path);
325325
326326 // / Gets a handle to the class loader corresponding to a specific class.
327327 /* *
328328 * @param class_name name of class for which we want to create instance.
329329 * @return A pointer to the ClassLoader, or NULL if not found.
330330 */
331331 template <typename Base>
332- ClassLoader * getClassLoaderForClass (const std::string & class_name)
332+ std::shared_ptr<class_loader:: ClassLoader> getClassLoaderForClass (const std::string & class_name)
333333 {
334334 ClassLoaderVector loaders = getAllAvailableClassLoaders ();
335335 for (ClassLoaderVector::iterator i = loaders.begin (); i != loaders.end (); ++i) {
0 commit comments