Use std::make_shared to create std::shared_ptr instances (#132)

* Use std::make_shared to create std::shared_ptr instances as it makes only one allocation

* Some previously private constructors have been made public as std::make_shared needs access to the constructor. While these constructors are not intended for client use, alternative[https://stackoverflow.com/questions/8147027/how-do-i-call-stdmake-shared-on-a-class-with-only-protected-or-private-const] approaches seem unnessessaryly complex.
diff --git a/src/main/cpp/aprsocket.cpp b/src/main/cpp/aprsocket.cpp
index 33b0d6f..1cacbb8 100644
--- a/src/main/cpp/aprsocket.cpp
+++ b/src/main/cpp/aprsocket.cpp
@@ -98,7 +98,7 @@
 			Transcoder::decode(buf, remoteip);
 		}
 
-		_priv->address = InetAddressPtr(new InetAddress(remotename, remoteip));
+		_priv->address = std::make_shared<InetAddress>(remotename, remoteip);
 	}
 }
 
diff --git a/src/main/cpp/asyncappender.cpp b/src/main/cpp/asyncappender.cpp
index 412dc66..20ff3cd 100644
--- a/src/main/cpp/asyncappender.cpp
+++ b/src/main/cpp/asyncappender.cpp
@@ -213,11 +213,10 @@
 		priv->dispatcher = ThreadUtility::instance()->createThread( LOG4CXX_STR("AsyncAppender"), &AsyncAppender::dispatch, this );
 	}
 
-	// Set the NDC and thread name for the calling thread as these
+	// Set the NDC and MDC for the calling thread as these
 	// LoggingEvent fields were not set at event creation time.
 	LogString ndcVal;
 	event->getNDC(ndcVal);
-	event->getThreadName();
 	// Get a copy of this thread's MDC.
 	event->getMDCCopy();
 
@@ -418,11 +417,11 @@
 	StringHelper::toString(count, p, msg);
 	msg.append(LOG4CXX_STR(" messages due to a full event buffer including: "));
 	msg.append(maxEvent->getMessage());
-	return LoggingEventPtr( new LoggingEvent(
+	return std::make_shared<LoggingEvent>(
 				maxEvent->getLoggerName(),
 				maxEvent->getLevel(),
 				msg,
-				LocationInfo::getLocationUnavailable()) );
+				LocationInfo::getLocationUnavailable() );
 }
 
 ::log4cxx::spi::LoggingEventPtr
@@ -433,11 +432,11 @@
 	StringHelper::toString(discardedCount, p, msg);
 	msg.append(LOG4CXX_STR(" messages due to a full event buffer"));
 
-	return LoggingEventPtr( new LoggingEvent(
+	return std::make_shared<LoggingEvent>(
 				LOG4CXX_STR(""),
 				log4cxx::Level::getError(),
 				msg,
-				LocationInfo::getLocationUnavailable()) );
+				LocationInfo::getLocationUnavailable() );
 }
 
 void AsyncAppender::dispatch()
diff --git a/src/main/cpp/basicconfigurator.cpp b/src/main/cpp/basicconfigurator.cpp
index 39db14b..3cf590b 100644
--- a/src/main/cpp/basicconfigurator.cpp
+++ b/src/main/cpp/basicconfigurator.cpp
@@ -28,8 +28,8 @@
 	LogManager::getLoggerRepository()->setConfigured(true);
 	LoggerPtr root = Logger::getRootLogger();
 	static const LogString TTCC_CONVERSION_PATTERN(LOG4CXX_STR("%r [%t] %p %c %x - %m%n"));
-	LayoutPtr layout(new PatternLayout(TTCC_CONVERSION_PATTERN));
-	AppenderPtr appender(new ConsoleAppender(layout));
+	LayoutPtr layout = std::make_shared<PatternLayout>(TTCC_CONVERSION_PATTERN);
+	auto appender = std::make_shared<ConsoleAppender>(layout);
 	root->addAppender(appender);
 }
 
diff --git a/src/main/cpp/charsetdecoder.cpp b/src/main/cpp/charsetdecoder.cpp
index 1071322..b400e41 100644
--- a/src/main/cpp/charsetdecoder.cpp
+++ b/src/main/cpp/charsetdecoder.cpp
@@ -547,7 +547,7 @@
 	//
 	if (decoder == 0)
 	{
-		return CharsetDecoderPtr( new UTF8CharsetDecoder() );
+		return std::make_shared<UTF8CharsetDecoder>();
 	}
 
 	return decoder;
@@ -555,7 +555,7 @@
 
 CharsetDecoderPtr CharsetDecoder::getISOLatinDecoder()
 {
-	return CharsetDecoderPtr( new ISOLatinCharsetDecoder() );
+	return std::make_shared<ISOLatinCharsetDecoder>();
 }
 
 
@@ -564,7 +564,7 @@
 	if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF-8"), LOG4CXX_STR("utf-8")) ||
 		StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF8"), LOG4CXX_STR("utf8")))
 	{
-		return CharsetDecoderPtr( new UTF8CharsetDecoder() );
+		return std::make_shared<UTF8CharsetDecoder>();
 	}
 	else if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("C"), LOG4CXX_STR("c")) ||
 		charset == LOG4CXX_STR("646") ||
@@ -572,16 +572,16 @@
 		StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO646-US"), LOG4CXX_STR("iso646-US")) ||
 		StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ANSI_X3.4-1968"), LOG4CXX_STR("ansi_x3.4-1968")))
 	{
-		return CharsetDecoderPtr( new USASCIICharsetDecoder() );
+		return std::make_shared<USASCIICharsetDecoder>();
 	}
 	else if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO-8859-1"), LOG4CXX_STR("iso-8859-1")) ||
 		StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO-LATIN-1"), LOG4CXX_STR("iso-latin-1")))
 	{
-		return CharsetDecoderPtr( new ISOLatinCharsetDecoder() );
+		return std::make_shared<ISOLatinCharsetDecoder>();
 	}
 
 #if APR_HAS_XLATE
-	return CharsetDecoderPtr( new APRCharsetDecoder(charset) );
+	return std::make_shared<APRCharsetDecoder>(charset);
 #else
 	throw IllegalArgumentException(charset);
 #endif
diff --git a/src/main/cpp/charsetencoder.cpp b/src/main/cpp/charsetencoder.cpp
index 5a29135..df61e48 100644
--- a/src/main/cpp/charsetencoder.cpp
+++ b/src/main/cpp/charsetencoder.cpp
@@ -571,7 +571,7 @@
 
 CharsetEncoderPtr CharsetEncoder::getUTF8Encoder()
 {
-	return CharsetEncoderPtr( new UTF8CharsetEncoder() );
+	return std::make_shared<UTF8CharsetEncoder>();
 }
 
 
@@ -580,7 +580,7 @@
 {
 	if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF-8"), LOG4CXX_STR("utf-8")))
 	{
-		return CharsetEncoderPtr( new UTF8CharsetEncoder() );
+		return std::make_shared<UTF8CharsetEncoder>();
 	}
 	else if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("C"), LOG4CXX_STR("c")) ||
 		charset == LOG4CXX_STR("646") ||
@@ -588,25 +588,25 @@
 		StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO646-US"), LOG4CXX_STR("iso646-US")) ||
 		StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ANSI_X3.4-1968"), LOG4CXX_STR("ansi_x3.4-1968")))
 	{
-		return CharsetEncoderPtr( new USASCIICharsetEncoder() );
+		return std::make_shared<USASCIICharsetEncoder>();
 	}
 	else if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO-8859-1"), LOG4CXX_STR("iso-8859-1")) ||
 		StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO-LATIN-1"), LOG4CXX_STR("iso-latin-1")))
 	{
-		return CharsetEncoderPtr( new ISOLatinCharsetEncoder() );
+		return std::make_shared<ISOLatinCharsetEncoder>();
 	}
 	else if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF-16BE"), LOG4CXX_STR("utf-16be"))
 		|| StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF-16"), LOG4CXX_STR("utf-16")))
 	{
-		return CharsetEncoderPtr( new UTF16BECharsetEncoder() );
+		return std::make_shared<UTF16BECharsetEncoder>();
 	}
 	else if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF-16LE"), LOG4CXX_STR("utf-16le")))
 	{
-		return CharsetEncoderPtr( new UTF16LECharsetEncoder() );
+		return std::make_shared<UTF16LECharsetEncoder>();
 	}
 
 #if APR_HAS_XLATE
-	return CharsetEncoderPtr( new APRCharsetEncoder(charset) );
+	return std::make_shared<APRCharsetEncoder>(charset);
 #else
 	throw IllegalArgumentException(charset);
 #endif
diff --git a/src/main/cpp/classnamepatternconverter.cpp b/src/main/cpp/classnamepatternconverter.cpp
index 33af1a9..5e2830a 100644
--- a/src/main/cpp/classnamepatternconverter.cpp
+++ b/src/main/cpp/classnamepatternconverter.cpp
@@ -43,11 +43,11 @@
 {
 	if (options.size() == 0)
 	{
-		static PatternConverterPtr def(new ClassNamePatternConverter(options));
+		static PatternConverterPtr def = std::make_shared<ClassNamePatternConverter>(options);
 		return def;
 	}
 
-	return PatternConverterPtr( new ClassNamePatternConverter(options) );
+	return std::make_shared<ClassNamePatternConverter>(options);
 }
 
 void ClassNamePatternConverter::format(
diff --git a/src/main/cpp/colorendpatternconverter.cpp b/src/main/cpp/colorendpatternconverter.cpp
index 46e1850..267146c 100644
--- a/src/main/cpp/colorendpatternconverter.cpp
+++ b/src/main/cpp/colorendpatternconverter.cpp
@@ -40,7 +40,7 @@
 PatternConverterPtr ColorEndPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr instance(new ColorEndPatternConverter());
+	static PatternConverterPtr instance = std::make_shared<ColorEndPatternConverter>();
 	return instance;
 }
 
diff --git a/src/main/cpp/colorstartpatternconverter.cpp b/src/main/cpp/colorstartpatternconverter.cpp
index 2130964..a86d8b4 100644
--- a/src/main/cpp/colorstartpatternconverter.cpp
+++ b/src/main/cpp/colorstartpatternconverter.cpp
@@ -40,7 +40,7 @@
 PatternConverterPtr ColorStartPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr instance(new ColorStartPatternConverter());
+	static PatternConverterPtr instance = std::make_shared<ColorStartPatternConverter>();
 	return instance;
 }
 
diff --git a/src/main/cpp/consoleappender.cpp b/src/main/cpp/consoleappender.cpp
index c324297..7d2287d 100644
--- a/src/main/cpp/consoleappender.cpp
+++ b/src/main/cpp/consoleappender.cpp
@@ -50,8 +50,7 @@
 {
 	setLayout(layout1);
 	Pool p;
-	WriterPtr writer1(new SystemOutWriter());
-	setWriter(writer1);
+	setWriter(std::make_shared<SystemOutWriter>());
 	WriterAppender::activateOptions(p);
 }
 
diff --git a/src/main/cpp/datepatternconverter.cpp b/src/main/cpp/datepatternconverter.cpp
index f10cfec..e05947c 100644
--- a/src/main/cpp/datepatternconverter.cpp
+++ b/src/main/cpp/datepatternconverter.cpp
@@ -69,7 +69,7 @@
 
 	if (options.size() == 0)
 	{
-		df = DateFormatPtr(new ISO8601DateFormat());
+		df = std::make_shared<ISO8601DateFormat>();
 	}
 	else
 	{
@@ -79,17 +79,17 @@
 			StringHelper::equalsIgnoreCase(dateFormatStr,
 				LOG4CXX_STR("ISO8601"), LOG4CXX_STR("iso8601")))
 		{
-			df = DateFormatPtr(new ISO8601DateFormat());
+			df = std::make_shared<ISO8601DateFormat>();
 		}
 		else if (StringHelper::equalsIgnoreCase(dateFormatStr,
 				LOG4CXX_STR("ABSOLUTE"), LOG4CXX_STR("absolute")))
 		{
-			df = DateFormatPtr(new AbsoluteTimeDateFormat());
+			df = std::make_shared<AbsoluteTimeDateFormat>();
 		}
 		else if (StringHelper::equalsIgnoreCase(dateFormatStr,
 				LOG4CXX_STR("DATE"), LOG4CXX_STR("date")))
 		{
-			df = DateFormatPtr(new DateTimeDateFormat());
+			df = std::make_shared<DateTimeDateFormat>();
 		}
 		else
 		{
@@ -97,13 +97,13 @@
 			{
 				try
 				{
-					df = DateFormatPtr(new SimpleDateFormat(dateFormatStr));
+					df = std::make_shared<SimpleDateFormat>(dateFormatStr);
 					maximumCacheValidity =
 						CachedDateFormat::getMaximumCacheValidity(dateFormatStr);
 				}
 				catch (IllegalArgumentException& e)
 				{
-					df = DateFormatPtr(new ISO8601DateFormat());
+					df = std::make_shared<ISO8601DateFormat>();
 					LogLog::warn(((LogString)
 							LOG4CXX_STR("Could not instantiate SimpleDateFormat with pattern "))
 						+ dateFormatStr, e);
@@ -111,7 +111,7 @@
 			}
 			else
 			{
-				df = DateFormatPtr(new StrftimeDateFormat(dateFormatStr));
+				df = std::make_shared<StrftimeDateFormat>(dateFormatStr);
 			}
 		}
 
@@ -128,7 +128,7 @@
 
 	if (maximumCacheValidity > 0)
 	{
-		df = DateFormatPtr(new CachedDateFormat(df, maximumCacheValidity));
+		df = std::make_shared<CachedDateFormat>(df, maximumCacheValidity);
 	}
 
 	return df;
@@ -137,7 +137,7 @@
 PatternConverterPtr DatePatternConverter::newInstance(
 	const std::vector<LogString>& options)
 {
-	return PatternConverterPtr(new DatePatternConverter(options));
+	return std::make_shared<DatePatternConverter>(options);
 }
 
 void DatePatternConverter::format(
diff --git a/src/main/cpp/defaultloggerfactory.cpp b/src/main/cpp/defaultloggerfactory.cpp
index 1efc590..0d55e77 100644
--- a/src/main/cpp/defaultloggerfactory.cpp
+++ b/src/main/cpp/defaultloggerfactory.cpp
@@ -26,5 +26,5 @@
 	log4cxx::helpers::Pool& pool,
 	const LogString& name) const
 {
-	return LoggerPtr(new Logger(pool, name));
+	return std::make_shared<Logger>(pool, name);
 }
diff --git a/src/main/cpp/domconfigurator.cpp b/src/main/cpp/domconfigurator.cpp
index d307805..17178ca 100644
--- a/src/main/cpp/domconfigurator.cpp
+++ b/src/main/cpp/domconfigurator.cpp
@@ -787,7 +787,7 @@
 	msg.append(LOG4CXX_STR("..."));
 	LogLog::debug(msg);
 
-	m_priv->loggerFactory = LoggerFactoryPtr(new DefaultLoggerFactory());
+	m_priv->loggerFactory = std::make_shared<DefaultLoggerFactory>();
 
 	Pool p;
 	apr_file_t* fd;
diff --git a/src/main/cpp/fileappender.cpp b/src/main/cpp/fileappender.cpp
index 991fe32..3881485 100644
--- a/src/main/cpp/fileappender.cpp
+++ b/src/main/cpp/fileappender.cpp
@@ -342,7 +342,7 @@
 
 	if (bufferedIO1)
 	{
-		newWriter = WriterPtr(new BufferedWriter(newWriter, bufferSize1));
+		newWriter = std::make_shared<BufferedWriter>(newWriter, bufferSize1);
 	}
 
 	setWriterInternal(newWriter);
diff --git a/src/main/cpp/filelocationpatternconverter.cpp b/src/main/cpp/filelocationpatternconverter.cpp
index 4889aee..9bb471b 100644
--- a/src/main/cpp/filelocationpatternconverter.cpp
+++ b/src/main/cpp/filelocationpatternconverter.cpp
@@ -40,7 +40,7 @@
 PatternConverterPtr FileLocationPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */ )
 {
-	static PatternConverterPtr instance(new FileLocationPatternConverter());
+	static PatternConverterPtr instance = std::make_shared<FileLocationPatternConverter>();
 	return instance;
 }
 
diff --git a/src/main/cpp/fixedwindowrollingpolicy.cpp b/src/main/cpp/fixedwindowrollingpolicy.cpp
index 7f2f126..9e99283 100644
--- a/src/main/cpp/fixedwindowrollingpolicy.cpp
+++ b/src/main/cpp/fixedwindowrollingpolicy.cpp
@@ -143,15 +143,14 @@
 	if (!priv->explicitActiveFile)
 	{
 		LogString buf;
-		ObjectPtr obj(new Integer(priv->minIndex));
+		ObjectPtr obj = std::make_shared<Integer>(priv->minIndex);
 		formatFileName(obj, buf, pool);
 		newActiveFile = buf;
 	}
 
 	ActionPtr noAction;
 
-	return RolloverDescriptionPtr(
-			new RolloverDescription(newActiveFile, append, noAction, noAction));
+	return std::make_shared<RolloverDescription>(newActiveFile, append, noAction, noAction);
 }
 
 /**
@@ -182,7 +181,7 @@
 	}
 
 	LogString buf;
-	ObjectPtr obj(new Integer(purgeStart));
+	ObjectPtr obj = std::make_shared<Integer>(purgeStart);
 	formatFileName(obj, buf, pool);
 
 	LogString renameTo(buf);
@@ -198,31 +197,28 @@
 	if (StringHelper::endsWith(renameTo, LOG4CXX_STR(".gz")))
 	{
 		renameTo.resize(renameTo.size() - 3);
-		compressAction = ActionPtr(
-				new GZCompressAction(
+		compressAction = std::make_shared<GZCompressAction>(
 					File().setPath(renameTo),
 					File().setPath(compressedName),
-					true));
+					true);
 	}
 	else if (StringHelper::endsWith(renameTo, LOG4CXX_STR(".zip")))
 	{
 		renameTo.resize(renameTo.size() - 4);
-		compressAction = ActionPtr(
-				new ZipCompressAction(
+		compressAction = std::make_shared<ZipCompressAction>(
 					File().setPath(renameTo),
 					File().setPath(compressedName),
-					true));
+					true);
 	}
 
-	FileRenameActionPtr renameAction = FileRenameActionPtr(
-			new FileRenameAction(
+	auto renameAction = std::make_shared<FileRenameAction>(
 				File().setPath(currentActiveFile),
 				File().setPath(renameTo),
-				false));
+				false);
 
-	desc = RolloverDescriptionPtr(new RolloverDescription(
+	desc = std::make_shared<RolloverDescription>(
 				currentActiveFile,  append,
-				renameAction,       compressAction));
+				renameAction,       compressAction);
 
 	return desc;
 }
@@ -259,7 +255,7 @@
 
 	std::vector<FileRenameActionPtr> renames;
 	LogString buf;
-	ObjectPtr obj = ObjectPtr(new Integer(lowIndex));
+	ObjectPtr obj = std::make_shared<Integer>(lowIndex);
 	formatFileName(obj, buf, p);
 
 	LogString lowFilename(buf);
@@ -320,7 +316,7 @@
 			//   if intermediate index
 			//     add a rename action to the list
 			buf.erase(buf.begin(), buf.end());
-			obj = ObjectPtr(new Integer(i + 1));
+			obj = std::make_shared<Integer>(i + 1);
 			formatFileName(obj, buf, p);
 
 			LogString highFilename(buf);
@@ -332,7 +328,7 @@
 					highFilename.substr(0, highFilename.length() - suffixLength);
 			}
 
-			renames.push_back(FileRenameActionPtr(new FileRenameAction(*toRename, File().setPath(renameTo), true)));
+			renames.push_back(std::make_shared<FileRenameAction>(*toRename, File().setPath(renameTo), true));
 			lowFilename = highFilename;
 		}
 		else
diff --git a/src/main/cpp/formattinginfo.cpp b/src/main/cpp/formattinginfo.cpp
index c0f0260..c75a387 100644
--- a/src/main/cpp/formattinginfo.cpp
+++ b/src/main/cpp/formattinginfo.cpp
@@ -67,7 +67,7 @@
  */
 FormattingInfoPtr FormattingInfo::getDefault()
 {
-	static FormattingInfoPtr def(new FormattingInfo(false, 0, INT_MAX));
+	static FormattingInfoPtr def= std::make_shared<FormattingInfo>(false, 0, INT_MAX);
 	return def;
 }
 
diff --git a/src/main/cpp/fulllocationpatternconverter.cpp b/src/main/cpp/fulllocationpatternconverter.cpp
index 466c2f5..eb70a3a 100644
--- a/src/main/cpp/fulllocationpatternconverter.cpp
+++ b/src/main/cpp/fulllocationpatternconverter.cpp
@@ -41,7 +41,7 @@
 PatternConverterPtr FullLocationPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr instance(new FullLocationPatternConverter());
+	static PatternConverterPtr instance = std::make_shared<FullLocationPatternConverter>();
 	return instance;
 }
 
diff --git a/src/main/cpp/hierarchy.cpp b/src/main/cpp/hierarchy.cpp
index 639c681..957ba0e 100644
--- a/src/main/cpp/hierarchy.cpp
+++ b/src/main/cpp/hierarchy.cpp
@@ -258,7 +258,7 @@
 	if (!result)
 	{
 		LoggerPtr logger(factory->makeNewLoggerInstance(m_priv->pool, name));
-		logger->setHierarchy(shared_from_this());
+		logger->setHierarchy(this);
 		m_priv->loggers.insert(LoggerMap::value_type(name, logger));
 
 		ProvisionNodeMap::iterator it2 = m_priv->provisionNodes.find(name);
@@ -448,7 +448,7 @@
 
 HierarchyPtr Hierarchy::create()
 {
-	HierarchyPtr ret( new Hierarchy() );
-	ret->m_priv->root->setHierarchy(ret);
+	HierarchyPtr ret(new Hierarchy);
+	ret->m_priv->root->setHierarchy(ret.get());
 	return ret;
 }
diff --git a/src/main/cpp/inetaddress.cpp b/src/main/cpp/inetaddress.cpp
index 2c7f972..a4647e4 100644
--- a/src/main/cpp/inetaddress.cpp
+++ b/src/main/cpp/inetaddress.cpp
@@ -103,7 +103,7 @@
 			Transcoder::decode(host, hostNameString);
 		}
 
-		result.push_back(InetAddressPtr(new InetAddress(hostNameString, ipAddrString)));
+		result.push_back(std::make_shared<InetAddress>(hostNameString, ipAddrString));
 		currentAddr = currentAddr->next;
 	}
 
diff --git a/src/main/cpp/integerpatternconverter.cpp b/src/main/cpp/integerpatternconverter.cpp
index 8761ced..6815ded 100644
--- a/src/main/cpp/integerpatternconverter.cpp
+++ b/src/main/cpp/integerpatternconverter.cpp
@@ -39,7 +39,7 @@
 PatternConverterPtr IntegerPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr instance(new IntegerPatternConverter());
+	static PatternConverterPtr instance = std::make_shared<IntegerPatternConverter>();
 	return instance;
 }
 
diff --git a/src/main/cpp/level.cpp b/src/main/cpp/level.cpp
index f2fb91d..7d794c5 100644
--- a/src/main/cpp/level.cpp
+++ b/src/main/cpp/level.cpp
@@ -32,50 +32,50 @@
 
 LevelPtr Level::getOff()
 {
-	static LevelPtr offLevel(new Level(Level::OFF_INT, LOG4CXX_STR("OFF"), 0));
+	static LevelPtr offLevel = std::make_shared<Level>(Level::OFF_INT, LOG4CXX_STR("OFF"), 0);
 	return offLevel;
 }
 
 LevelPtr Level::getFatal()
 {
-	static LevelPtr fatalLevel(new Level(Level::FATAL_INT, LOG4CXX_STR("FATAL"), 0));
+	static LevelPtr fatalLevel = std::make_shared<Level>(Level::FATAL_INT, LOG4CXX_STR("FATAL"), 0);
 	return fatalLevel;
 }
 
 LevelPtr Level::getError()
 {
-	static LevelPtr errorLevel(new Level(Level::ERROR_INT, LOG4CXX_STR("ERROR"), 3));
+	static LevelPtr errorLevel = std::make_shared<Level>(Level::ERROR_INT, LOG4CXX_STR("ERROR"), 3);
 	return errorLevel;
 }
 
 LevelPtr Level::getWarn()
 {
-	static LevelPtr warnLevel(new Level(Level::WARN_INT, LOG4CXX_STR("WARN"), 4));
+	static LevelPtr warnLevel = std::make_shared<Level>(Level::WARN_INT, LOG4CXX_STR("WARN"), 4);
 	return warnLevel;
 }
 
 LevelPtr Level::getInfo()
 {
-	static LevelPtr infoLevel(new Level(Level::INFO_INT, LOG4CXX_STR("INFO"), 6));
+	static LevelPtr infoLevel = std::make_shared<Level>(Level::INFO_INT, LOG4CXX_STR("INFO"), 6);
 	return infoLevel;
 }
 
 LevelPtr Level::getDebug()
 {
-	static LevelPtr debugLevel(new Level(Level::DEBUG_INT, LOG4CXX_STR("DEBUG"), 7));
+	static LevelPtr debugLevel = std::make_shared<Level>(Level::DEBUG_INT, LOG4CXX_STR("DEBUG"), 7);
 	return debugLevel;
 }
 
 LevelPtr Level::getTrace()
 {
-	static LevelPtr traceLevel(new Level(Level::TRACE_INT, LOG4CXX_STR("TRACE"), 7));
+	static LevelPtr traceLevel = std::make_shared<Level>(Level::TRACE_INT, LOG4CXX_STR("TRACE"), 7);
 	return traceLevel;
 }
 
 
 LevelPtr Level::getAll()
 {
-	static LevelPtr allLevel(new Level(Level::ALL_INT, LOG4CXX_STR("ALL"), 7));
+	static LevelPtr allLevel = std::make_shared<Level>(Level::ALL_INT, LOG4CXX_STR("ALL"), 7);
 	return allLevel;
 }
 
diff --git a/src/main/cpp/levelpatternconverter.cpp b/src/main/cpp/levelpatternconverter.cpp
index 70539c8..7d4f7f0 100644
--- a/src/main/cpp/levelpatternconverter.cpp
+++ b/src/main/cpp/levelpatternconverter.cpp
@@ -41,7 +41,7 @@
 PatternConverterPtr LevelPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr def(new LevelPatternConverter());
+	static PatternConverterPtr def = std::make_shared<LevelPatternConverter>();
 	return def;
 }
 
diff --git a/src/main/cpp/linelocationpatternconverter.cpp b/src/main/cpp/linelocationpatternconverter.cpp
index bb606ab..b93ce2f 100644
--- a/src/main/cpp/linelocationpatternconverter.cpp
+++ b/src/main/cpp/linelocationpatternconverter.cpp
@@ -40,7 +40,7 @@
 PatternConverterPtr LineLocationPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr instance(new LineLocationPatternConverter());
+	static PatternConverterPtr instance = std::make_shared<LineLocationPatternConverter>();
 	return instance;
 }
 
diff --git a/src/main/cpp/lineseparatorpatternconverter.cpp b/src/main/cpp/lineseparatorpatternconverter.cpp
index 6aa0c82..a40cae9 100644
--- a/src/main/cpp/lineseparatorpatternconverter.cpp
+++ b/src/main/cpp/lineseparatorpatternconverter.cpp
@@ -40,7 +40,7 @@
 PatternConverterPtr LineSeparatorPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr instance(new LineSeparatorPatternConverter());
+	static PatternConverterPtr instance = std::make_shared<LineSeparatorPatternConverter>();
 	return instance;
 }
 
diff --git a/src/main/cpp/literalpatternconverter.cpp b/src/main/cpp/literalpatternconverter.cpp
index b9851fc..901ca18 100644
--- a/src/main/cpp/literalpatternconverter.cpp
+++ b/src/main/cpp/literalpatternconverter.cpp
@@ -56,12 +56,11 @@
 {
 	if (literal.length() == 1 && literal[0] == 0x20 /* ' ' */)
 	{
-		static PatternConverterPtr blank(new LiteralPatternConverter(literal));
+		static PatternConverterPtr blank = std::make_shared<LiteralPatternConverter>(literal);
 		return blank;
 	}
 
-	PatternConverterPtr pattern(new LiteralPatternConverter(literal));
-	return pattern;
+	return std::make_shared<LiteralPatternConverter>(literal);
 }
 
 void LiteralPatternConverter::format(
diff --git a/src/main/cpp/loader.cpp b/src/main/cpp/loader.cpp
index f2c056b..196797a 100644
--- a/src/main/cpp/loader.cpp
+++ b/src/main/cpp/loader.cpp
@@ -65,7 +65,7 @@
 
 	try
 	{
-		return InputStreamPtr( new FileInputStream(name) );
+		return std::make_shared<FileInputStream>(name);
 	}
 	catch (const IOException&)
 	{
diff --git a/src/main/cpp/logger.cpp b/src/main/cpp/logger.cpp
index 361f51b..e7460fb 100644
--- a/src/main/cpp/logger.cpp
+++ b/src/main/cpp/logger.cpp
@@ -70,7 +70,6 @@
 
 
 	// Loggers need to know what Hierarchy they are in
-	log4cxx::spi::LoggerRepositoryWeakPtr repository;
 	log4cxx::spi::LoggerRepository* repositoryRaw;
 
 	helpers::AppenderAttachableImpl aai;
@@ -166,7 +165,7 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_CHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg, location));
+	auto event = std::make_shared<LoggingEvent>(m_priv->name, level1, msg, location);
 	callAppenders(event, p);
 }
 
@@ -177,8 +176,8 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_CHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg,
-			LocationInfo::getLocationUnavailable()));
+	auto event = std::make_shared<LoggingEvent>(m_priv->name, level1, msg,
+			LocationInfo::getLocationUnavailable());
 	callAppenders(event, p);
 }
 
@@ -188,7 +187,7 @@
 	if (!getHierarchy()) // Has removeHierarchy() been called?
 		return;
 	Pool p;
-	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, message, location));
+	auto event = std::make_shared<LoggingEvent>(m_priv->name, level1, message, location);
 	callAppenders(event, p);
 }
 
@@ -224,9 +223,9 @@
 #endif
 }
 
-LoggerRepositoryPtr Logger::getLoggerRepository() const
+LoggerRepository* Logger::getLoggerRepository() const
 {
-	return m_priv->repository.lock();
+	return m_priv->repositoryRaw;
 }
 
 LoggerRepository* Logger::getHierarchy() const
@@ -500,7 +499,6 @@
 
 void Logger::removeHierarchy()
 {
-	m_priv->repository.reset();
 	m_priv->repositoryRaw = 0;
 }
 
@@ -509,10 +507,9 @@
 	m_priv->additive = additive1;
 }
 
-void Logger::setHierarchy(const spi::LoggerRepositoryPtr& repository1)
+void Logger::setHierarchy(spi::LoggerRepository* repository1)
 {
-	m_priv->repository = repository1;
-	m_priv->repositoryRaw = repository1.get();
+	m_priv->repositoryRaw = repository1;
 }
 
 void Logger::setParent(LoggerPtr parentLogger)
@@ -704,7 +701,7 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_WCHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg, location));
+	auto event = std::make_shared<LoggingEvent>(m_priv->name, level1, msg, location);
 	callAppenders(event, p);
 }
 
@@ -714,8 +711,8 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_WCHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg,
-			LocationInfo::getLocationUnavailable()));
+	auto event = std::make_shared<LoggingEvent>(m_priv->name, level1, msg,
+			LocationInfo::getLocationUnavailable());
 	callAppenders(event, p);
 }
 
@@ -859,7 +856,7 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_UNICHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg, location));
+	auto event = std::make_shared<LoggingEvent>(m_priv->name, level1, msg, location);
 	callAppenders(event, p);
 }
 
@@ -869,8 +866,8 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_UNICHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg,
-			LocationInfo::getLocationUnavailable()));
+	auto event = std::make_shared<LoggingEvent>(m_priv->name, level1, msg,
+			LocationInfo::getLocationUnavailable());
 	callAppenders(event, p);
 }
 #endif
@@ -1011,7 +1008,7 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_CFSTRING(msg, message);
-	LoggingEventPtr event(new LoggingEvent(name, level1, msg, location));
+	auto event = std::make_shared<LoggingEvent>(name, level1, msg, location);
 	callAppenders(event, p);
 }
 
@@ -1021,8 +1018,8 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_CFSTRING(msg, message);
-	LoggingEventPtr event(new LoggingEvent(name, level1, msg,
-			LocationInfo::getLocationUnavailable()));
+	auto event = std::make_shared<LoggingEvent>(name, level1, msg,
+			LocationInfo::getLocationUnavailable());
 	callAppenders(event, p);
 }
 
diff --git a/src/main/cpp/loggerpatternconverter.cpp b/src/main/cpp/loggerpatternconverter.cpp
index eaf7657..2fa6d57 100644
--- a/src/main/cpp/loggerpatternconverter.cpp
+++ b/src/main/cpp/loggerpatternconverter.cpp
@@ -42,11 +42,11 @@
 {
 	if (options.size() == 0)
 	{
-		static PatternConverterPtr def(new LoggerPatternConverter(options));
+		static PatternConverterPtr def = std::make_shared<LoggerPatternConverter>(options);
 		return def;
 	}
 
-	return PatternConverterPtr(new LoggerPatternConverter(options));
+	return std::make_shared<LoggerPatternConverter>(options);
 }
 
 void LoggerPatternConverter::format(
diff --git a/src/main/cpp/logmanager.cpp b/src/main/cpp/logmanager.cpp
index bbd0387..07fb4af 100644
--- a/src/main/cpp/logmanager.cpp
+++ b/src/main/cpp/logmanager.cpp
@@ -53,7 +53,7 @@
 	auto result = APRInitializer::getOrAddUnique<spi::RepositorySelector>( []() -> ObjectPtr
 		{
 			LoggerRepositoryPtr hierarchy = Hierarchy::create();
-			return ObjectPtr(new DefaultRepositorySelector(hierarchy));
+			return std::make_shared<DefaultRepositorySelector>(hierarchy);
 		}
 	);
 	return result;
diff --git a/src/main/cpp/messagepatternconverter.cpp b/src/main/cpp/messagepatternconverter.cpp
index fa0ecda..b30d50d 100644
--- a/src/main/cpp/messagepatternconverter.cpp
+++ b/src/main/cpp/messagepatternconverter.cpp
@@ -41,7 +41,7 @@
 PatternConverterPtr MessagePatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr def(new MessagePatternConverter());
+	static PatternConverterPtr def = std::make_shared<MessagePatternConverter>();
 	return def;
 }
 
diff --git a/src/main/cpp/methodlocationpatternconverter.cpp b/src/main/cpp/methodlocationpatternconverter.cpp
index 280e4b8..ecbb536 100644
--- a/src/main/cpp/methodlocationpatternconverter.cpp
+++ b/src/main/cpp/methodlocationpatternconverter.cpp
@@ -41,7 +41,7 @@
 PatternConverterPtr MethodLocationPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */ )
 {
-	static PatternConverterPtr def(new MethodLocationPatternConverter());
+	static PatternConverterPtr def = std::make_shared<MethodLocationPatternConverter>();
 	return def;
 }
 
diff --git a/src/main/cpp/nameabbreviator.cpp b/src/main/cpp/nameabbreviator.cpp
index c8aa754..e212976 100644
--- a/src/main/cpp/nameabbreviator.cpp
+++ b/src/main/cpp/nameabbreviator.cpp
@@ -291,7 +291,7 @@
 		//
 		if (i == trimmed.length())
 		{
-			return NameAbbreviatorPtr(new MaxElementAbbreviator(StringHelper::toInt(trimmed)));
+			return std::make_shared<MaxElementAbbreviator>(StringHelper::toInt(trimmed));
 		}
 
 		std::vector<PatternAbbreviatorFragment> fragments;
@@ -345,8 +345,7 @@
 			pos++;
 		}
 
-		NameAbbreviatorPtr abbrev(new PatternAbbreviator(fragments));
-		return abbrev;
+		return std::make_shared<PatternAbbreviator>(fragments);
 	}
 
 	//
@@ -362,7 +361,7 @@
  */
 NameAbbreviatorPtr NameAbbreviator::getDefaultAbbreviator()
 {
-	static NameAbbreviatorPtr def(new NOPAbbreviator());
+	static NameAbbreviatorPtr def = std::make_shared<NOPAbbreviator>();
 	return def;
 }
 
diff --git a/src/main/cpp/ndcpatternconverter.cpp b/src/main/cpp/ndcpatternconverter.cpp
index e6acb15..59e7f4b 100644
--- a/src/main/cpp/ndcpatternconverter.cpp
+++ b/src/main/cpp/ndcpatternconverter.cpp
@@ -42,7 +42,7 @@
 PatternConverterPtr NDCPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr def(new NDCPatternConverter());
+	static PatternConverterPtr def = std::make_shared<NDCPatternConverter>();
 	return def;
 }
 
diff --git a/src/main/cpp/odbcappender.cpp b/src/main/cpp/odbcappender.cpp
index 1a105ea..b6e37eb 100644
--- a/src/main/cpp/odbcappender.cpp
+++ b/src/main/cpp/odbcappender.cpp
@@ -345,7 +345,7 @@
 
 	if (getLayout() == 0)
 	{
-		this->setLayout(PatternLayoutPtr(new PatternLayout(s)));
+		this->setLayout(std::make_shared<PatternLayout>(s));
 	}
 	else
 	{
diff --git a/src/main/cpp/optionconverter.cpp b/src/main/cpp/optionconverter.cpp
index 9a4b4bc..89bcc9b 100644
--- a/src/main/cpp/optionconverter.cpp
+++ b/src/main/cpp/optionconverter.cpp
@@ -442,7 +442,7 @@
 	}
 	else
 	{
-		configurator = ConfiguratorPtr(new PropertyConfigurator());
+		configurator = std::make_shared<PropertyConfigurator>();
 	}
 
 #if APR_HAS_THREADS
diff --git a/src/main/cpp/patternparser.cpp b/src/main/cpp/patternparser.cpp
index 360f170..05a3328 100644
--- a/src/main/cpp/patternparser.cpp
+++ b/src/main/cpp/patternparser.cpp
@@ -179,10 +179,9 @@
 				switch (c)
 				{
 					case 0x2D: // '-'
-						formattingInfo = FormattingInfoPtr(
-								new FormattingInfo(
+						formattingInfo = std::make_shared<FormattingInfo>(
 									true, formattingInfo->getMinLength(),
-									formattingInfo->getMaxLength()));
+									formattingInfo->getMaxLength());
 
 						break;
 
@@ -195,10 +194,9 @@
 
 						if ((c >= 0x30 /* '0' */) && (c <= 0x39 /* '9' */))
 						{
-							formattingInfo = FormattingInfoPtr(
-									new FormattingInfo(
+							formattingInfo = std::make_shared<FormattingInfo>(
 										formattingInfo->isLeftAligned(), c - 0x30 /* '0' */,
-										formattingInfo->getMaxLength()));
+										formattingInfo->getMaxLength());
 							state = MIN_STATE;
 						}
 						else
@@ -225,11 +223,10 @@
 
 				if ((c >= 0x30 /* '0' */) && (c <= 0x39 /* '9' */))
 				{
-					formattingInfo = FormattingInfoPtr(
-							new FormattingInfo(
+					formattingInfo = std::make_shared<FormattingInfo>(
 								formattingInfo->isLeftAligned(),
 								(formattingInfo->getMinLength() * 10) + (c - 0x30 /* '0' */),
-								formattingInfo->getMaxLength()));
+								formattingInfo->getMaxLength());
 				}
 				else if (c == 0x2E /* '.' */)
 				{
@@ -256,10 +253,9 @@
 
 				if ((c >= 0x30 /* '0' */) && (c <= 0x39 /* '9' */))
 				{
-					formattingInfo = FormattingInfoPtr(
-							new FormattingInfo(
+					formattingInfo = std::make_shared<FormattingInfo>(
 								formattingInfo->isLeftAligned(), formattingInfo->getMinLength(),
-								c - 0x30 /* '0' */));
+								c - 0x30 /* '0' */);
 					state = MAX_STATE;
 				}
 				else
@@ -276,10 +272,9 @@
 
 				if ((c >= 0x30 /* '0' */) && (c <= 0x39 /* '9' */))
 				{
-					formattingInfo = FormattingInfoPtr(
-							new FormattingInfo(
+					formattingInfo = std::make_shared<FormattingInfo>(
 								formattingInfo->isLeftAligned(), formattingInfo->getMinLength(),
-								(formattingInfo->getMaxLength() * 10) + (c - 0x30 /* '0' */)));
+								(formattingInfo->getMaxLength() * 10) + (c - 0x30 /* '0' */));
 				}
 				else
 				{
diff --git a/src/main/cpp/properties.cpp b/src/main/cpp/properties.cpp
index 0ba9e16..3798245 100644
--- a/src/main/cpp/properties.cpp
+++ b/src/main/cpp/properties.cpp
@@ -430,8 +430,7 @@
 void Properties::load(InputStreamPtr inStream)
 {
 	Pool pool;
-	InputStreamReaderPtr lineReader(
-		new InputStreamReader(inStream, CharsetDecoder::getISOLatinDecoder()));
+	auto lineReader = std::make_shared<InputStreamReader>(inStream, CharsetDecoder::getISOLatinDecoder());
 	LogString contents = lineReader->read(pool);
 	properties->clear();
 	PropertyParser parser;
diff --git a/src/main/cpp/propertiespatternconverter.cpp b/src/main/cpp/propertiespatternconverter.cpp
index 4ddf718..c90fde2 100644
--- a/src/main/cpp/propertiespatternconverter.cpp
+++ b/src/main/cpp/propertiespatternconverter.cpp
@@ -60,17 +60,15 @@
 {
 	if (options.size() == 0)
 	{
-		static PatternConverterPtr def(new PropertiesPatternConverter(
-				LOG4CXX_STR("Properties"), LOG4CXX_STR("")));
+		static PatternConverterPtr def = std::make_shared<PropertiesPatternConverter>(
+				LOG4CXX_STR("Properties"), LOG4CXX_STR(""));
 		return def;
 	}
 
 	LogString converterName(LOG4CXX_STR("Property{"));
 	converterName.append(options[0]);
 	converterName.append(LOG4CXX_STR("}"));
-	PatternConverterPtr converter(new PropertiesPatternConverter(
-			converterName, options[0]));
-	return converter;
+	return std::make_shared<PropertiesPatternConverter>(converterName, options[0]);
 }
 
 void PropertiesPatternConverter::format(
diff --git a/src/main/cpp/relativetimepatternconverter.cpp b/src/main/cpp/relativetimepatternconverter.cpp
index a290de3..2742008 100644
--- a/src/main/cpp/relativetimepatternconverter.cpp
+++ b/src/main/cpp/relativetimepatternconverter.cpp
@@ -41,7 +41,7 @@
 PatternConverterPtr RelativeTimePatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr def(new RelativeTimePatternConverter());
+	static PatternConverterPtr def = std::make_shared<RelativeTimePatternConverter>();
 	return def;
 }
 
diff --git a/src/main/cpp/resourcebundle.cpp b/src/main/cpp/resourcebundle.cpp
index ea5ea11..a446d5a 100644
--- a/src/main/cpp/resourcebundle.cpp
+++ b/src/main/cpp/resourcebundle.cpp
@@ -92,7 +92,7 @@
 
 			try
 			{
-				current = PropertyResourceBundlePtr(new PropertyResourceBundle(bundleStream));
+				current = std::make_shared<PropertyResourceBundle>(bundleStream);
 			}
 			catch (Exception&)
 			{
diff --git a/src/main/cpp/rollingfileappender.cpp b/src/main/cpp/rollingfileappender.cpp
index 838938d..0320507 100644
--- a/src/main/cpp/rollingfileappender.cpp
+++ b/src/main/cpp/rollingfileappender.cpp
@@ -95,7 +95,7 @@
 {
 	if (_priv->rollingPolicy == NULL)
 	{
-		FixedWindowRollingPolicyPtr fwrp = FixedWindowRollingPolicyPtr(new FixedWindowRollingPolicy());
+		auto fwrp = std::make_shared<FixedWindowRollingPolicy>();
 		fwrp->setFileNamePattern(getFile() + LOG4CXX_STR(".%i"));
 		_priv->rollingPolicy = fwrp;
 	}
@@ -115,7 +115,7 @@
 
 	if (_priv->triggeringPolicy == NULL)
 	{
-		_priv->triggeringPolicy = TriggeringPolicyPtr(new ManualTriggeringPolicy());
+		_priv->triggeringPolicy = std::make_shared<ManualTriggeringPolicy>();
 	}
 
 	{
@@ -226,7 +226,7 @@
 			std::string fileName(getFile());
 			RollingPolicyBase* basePolicy = dynamic_cast<RollingPolicyBase* >(&(*rollingPolicy));
 			apr_time_t n = apr_time_now();
-			ObjectPtr obj(new Date(n));
+			ObjectPtr obj = std::make_shared<Date>(n);
 			LogString fileNamePattern;
 
 			if (basePolicy)
@@ -463,7 +463,7 @@
 void RollingFileAppenderSkeleton::reopenLatestFile(Pool& p)
 {
 	closeWriter();
-	OutputStreamPtr os(new FileOutputStream(getFile(), true));
+	OutputStreamPtr os = std::make_shared<FileOutputStream(getFile>(), true);
 	WriterPtr newWriter(createWriter(os));
 	setFile(getFile());
 	setWriter(newWriter);
@@ -669,7 +669,7 @@
  */
 WriterPtr RollingFileAppender::createWriter(OutputStreamPtr& os)
 {
-	OutputStreamPtr cos(new CountingOutputStream(os, this));
+	OutputStreamPtr cos = std::make_shared<CountingOutputStream>(os, this);
 	return FileAppender::createWriter(cos);
 }
 
diff --git a/src/main/cpp/rollingpolicybase.cpp b/src/main/cpp/rollingpolicybase.cpp
index 3cfd6a0..3e409df 100644
--- a/src/main/cpp/rollingpolicybase.cpp
+++ b/src/main/cpp/rollingpolicybase.cpp
@@ -114,7 +114,7 @@
  * @param buf string buffer to which formatted file name is appended, may not be null.
  */
 void RollingPolicyBase::formatFileName(
-	ObjectPtr& obj,
+	const ObjectPtr& obj,
 	LogString& toAppendTo,
 	Pool& pool) const
 {
diff --git a/src/main/cpp/syslogwriter.cpp b/src/main/cpp/syslogwriter.cpp
index dde4ffa..5ab1ba5 100644
--- a/src/main/cpp/syslogwriter.cpp
+++ b/src/main/cpp/syslogwriter.cpp
@@ -71,9 +71,9 @@
 	{
 		LOG4CXX_ENCODE_CHAR(data, source);
 
-		DatagramPacketPtr packet(
-			new DatagramPacket((void*) data.data(), data.length(),
-				m_priv->address, m_priv->syslogHostPort));
+		auto packet = std::make_shared<DatagramPacket>(
+				(void*) data.data(), data.length(),
+				m_priv->address, m_priv->syslogHostPort);
 
 		m_priv->ds->send(packet);
 	}
diff --git a/src/main/cpp/threadpatternconverter.cpp b/src/main/cpp/threadpatternconverter.cpp
index 47323dd..5453215 100644
--- a/src/main/cpp/threadpatternconverter.cpp
+++ b/src/main/cpp/threadpatternconverter.cpp
@@ -39,7 +39,7 @@
 PatternConverterPtr ThreadPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr def(new ThreadPatternConverter());
+	static PatternConverterPtr def = std::make_shared<ThreadPatternConverter>();
 	return def;
 }
 
diff --git a/src/main/cpp/threadusernamepatternconverter.cpp b/src/main/cpp/threadusernamepatternconverter.cpp
index 81e042a..cadba74 100644
--- a/src/main/cpp/threadusernamepatternconverter.cpp
+++ b/src/main/cpp/threadusernamepatternconverter.cpp
@@ -39,7 +39,7 @@
 PatternConverterPtr ThreadUsernamePatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr def(new ThreadUsernamePatternConverter());
+	static PatternConverterPtr def = std::make_shared<ThreadUsernamePatternConverter>();
 	return def;
 }
 
diff --git a/src/main/cpp/threadutility.cpp b/src/main/cpp/threadutility.cpp
index fcc3c6b..543281d 100644
--- a/src/main/cpp/threadutility.cpp
+++ b/src/main/cpp/threadutility.cpp
@@ -62,15 +62,15 @@
 
 ThreadUtility::~ThreadUtility() {}
 
-std::shared_ptr<ThreadUtility> ThreadUtility::instance()
+ThreadUtility* ThreadUtility::instance()
 {
-	static std::shared_ptr<ThreadUtility> instance( new ThreadUtility() );
-	return instance;
+	static ThreadUtility instance;
+	return &instance;
 }
 
 void ThreadUtility::configure( ThreadConfigurationType type )
 {
-	std::shared_ptr<ThreadUtility> utility = instance();
+	auto utility = instance();
 
 	if ( type == ThreadConfigurationType::NoConfiguration )
 	{
diff --git a/src/main/cpp/throwableinformationpatternconverter.cpp b/src/main/cpp/throwableinformationpatternconverter.cpp
index 202db92..8a06c3a 100644
--- a/src/main/cpp/throwableinformationpatternconverter.cpp
+++ b/src/main/cpp/throwableinformationpatternconverter.cpp
@@ -61,11 +61,11 @@
 {
 	if (options.size() > 0 && options[0].compare(LOG4CXX_STR("short")) == 0)
 	{
-		static PatternConverterPtr shortConverter(new ThrowableInformationPatternConverter(true));
+		static PatternConverterPtr shortConverter = std::make_shared<ThrowableInformationPatternConverter>(true);
 		return shortConverter;
 	}
 
-	static PatternConverterPtr converter(new ThrowableInformationPatternConverter(false));
+	static PatternConverterPtr converter = std::make_shared<ThrowableInformationPatternConverter>(false);
 	return converter;
 }
 
diff --git a/src/main/cpp/timebasedrollingpolicy.cpp b/src/main/cpp/timebasedrollingpolicy.cpp
index 3659a51..34fa098 100644
--- a/src/main/cpp/timebasedrollingpolicy.cpp
+++ b/src/main/cpp/timebasedrollingpolicy.cpp
@@ -196,7 +196,7 @@
 	}
 
 	LogString buf;
-	ObjectPtr obj(new Date());
+	ObjectPtr obj = std::make_shared<Date>();
 	formatFileName(obj, buf, pool);
 	lastFileName = buf;
 
@@ -267,7 +267,7 @@
 	File currentFile(currentActiveFile);
 
 	LogString buf;
-	ObjectPtr obj(new Date(currentFile.exists(pool) ? currentFile.lastModified(pool) : n));
+	ObjectPtr obj = std::make_shared<Date>(currentFile.exists(pool) ? currentFile.lastModified(pool) : n);
 	formatFileName(obj, buf, pool);
 	lastFileName = buf;
 
@@ -275,15 +275,15 @@
 
 	if (currentActiveFile.length() > 0)
 	{
-		return RolloverDescriptionPtr(new RolloverDescription(
-					currentActiveFile, append, noAction, noAction));
+		return std::make_shared<RolloverDescription>(
+					currentActiveFile, append, noAction, noAction);
 	}
 	else
 	{
 		bRefreshCurFile = true;
-		return RolloverDescriptionPtr(new RolloverDescription(
+		return std::make_shared<RolloverDescription>(
 					lastFileName.substr(0, lastFileName.length() - suffixLength), append,
-					noAction, noAction));
+					noAction, noAction);
 	}
 }
 
@@ -297,7 +297,7 @@
 	nextCheck = now.getNextSecond();
 
 	LogString buf;
-	ObjectPtr obj(new Date(n));
+	ObjectPtr obj = std::make_shared<Date>(n);
 	formatFileName(obj, buf, pool);
 
 	LogString newFileName(buf);
@@ -348,24 +348,21 @@
 	//        and requires a rename plus maintaining the same name
 	if (currentActiveFile != lastBaseName)
 	{
-		renameAction = FileRenameActionPtr(
-				new FileRenameAction(
-					File().setPath(currentActiveFile), File().setPath(lastBaseName), true));
+		renameAction = std::make_shared<FileRenameAction>(
+					File().setPath(currentActiveFile), File().setPath(lastBaseName), true);
 		nextActiveFile = currentActiveFile;
 	}
 
 	if (suffixLength == 3)
 	{
-		compressAction = GZCompressActionPtr(
-				new GZCompressAction(
-					File().setPath(lastBaseName), File().setPath(lastFileName), true));
+		compressAction = std::make_shared<GZCompressAction>(
+					File().setPath(lastBaseName), File().setPath(lastFileName), true);
 	}
 
 	if (suffixLength == 4)
 	{
-		compressAction = ZipCompressActionPtr(
-				new ZipCompressAction(
-					File().setPath(lastBaseName), File().setPath(lastFileName), true));
+		compressAction = std::make_shared<ZipCompressAction>(
+					File().setPath(lastBaseName), File().setPath(lastFileName), true);
 	}
 
 #ifdef LOG4CXX_MULTI_PROCESS
@@ -387,7 +384,7 @@
 	lastFileName = newFileName;
 #endif
 
-	return RolloverDescriptionPtr(new RolloverDescription(nextActiveFile, append, renameAction, compressAction));
+	return std::make_shared<RolloverDescription>(nextActiveFile, append, renameAction, compressAction);
 }
 
 bool TimeBasedRollingPolicy::isTriggeringEvent(
diff --git a/src/main/cpp/timezone.cpp b/src/main/cpp/timezone.cpp
index 2beae5d..b7c7fa8 100644
--- a/src/main/cpp/timezone.cpp
+++ b/src/main/cpp/timezone.cpp
@@ -50,7 +50,7 @@
 		/** Class factory. */
 		static const TimeZonePtr& getInstance()
 		{
-			static TimeZonePtr tz( new GMTTimeZone() );
+			static TimeZonePtr tz = std::make_shared<GMTTimeZone>();
 			return tz;
 		}
 
@@ -75,7 +75,6 @@
 			return stat;
 		}
 
-	private:
 		GMTTimeZone() : TimeZone( LOG4CXX_STR("GMT") )
 		{
 		}
@@ -90,7 +89,7 @@
 		/** Class factory. */
 		static const TimeZonePtr& getInstance()
 		{
-			static TimeZonePtr tz( new LocalTimeZone() );
+			static TimeZonePtr tz = std::make_shared<LocalTimeZone>();
 			return tz;
 		}
 
@@ -116,11 +115,11 @@
 		}
 
 
-	private:
 		LocalTimeZone() : TimeZone( getTimeZoneName() )
 		{
 		}
 
+	private:
 		static const LogString getTimeZoneName()
 		{
 			const int MAX_TZ_LENGTH = 255;
@@ -276,7 +275,7 @@
 
 		s.append(mm);
 		apr_int32_t offset = sign * (hours * 3600 + minutes * 60);
-		return TimeZonePtr(new log4cxx::helpers::TimeZoneImpl::FixedTimeZone( s, offset ));
+		return std::make_shared<helpers::TimeZoneImpl::FixedTimeZone>( s, offset );
 	}
 
 	const TimeZonePtr& ltz = getDefault();
diff --git a/src/main/cpp/xmlsocketappender.cpp b/src/main/cpp/xmlsocketappender.cpp
index 39134ad..594b590 100644
--- a/src/main/cpp/xmlsocketappender.cpp
+++ b/src/main/cpp/xmlsocketappender.cpp
@@ -100,10 +100,10 @@
 
 void XMLSocketAppender::setSocket(log4cxx::helpers::SocketPtr& socket, Pool& p)
 {
-	OutputStreamPtr os(new SocketOutputStream(socket));
+	OutputStreamPtr os = std::make_shared<SocketOutputStream>(socket);
 	CharsetEncoderPtr charset(CharsetEncoder::getUTF8Encoder());
 	std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
-	_priv->writer = OutputStreamWriterPtr(new OutputStreamWriter(os, charset));
+	_priv->writer = std::make_shared<OutputStreamWriter>(os, charset);
 }
 
 void XMLSocketAppender::cleanUp(Pool& p)
diff --git a/src/main/include/log4cxx/helpers/threadutility.h b/src/main/include/log4cxx/helpers/threadutility.h
index 498bcba..901379d 100644
--- a/src/main/include/log4cxx/helpers/threadutility.h
+++ b/src/main/include/log4cxx/helpers/threadutility.h
@@ -76,11 +76,10 @@
 		log4cxx::helpers::ThreadStartPost postStartFunction();
 
 		LOG4CXX_DECLARE_PRIVATE_MEMBER_PTR(priv_data, m_priv)
-
 	public:
 		~ThreadUtility();
 
-		static std::shared_ptr<ThreadUtility> instance();
+		static ThreadUtility* instance();
 
 		/**
 		 * Utility method for configuring the ThreadUtility in a standard
diff --git a/src/main/include/log4cxx/logger.h b/src/main/include/log4cxx/logger.h
index e4a3540..f27f78e 100644
--- a/src/main/include/log4cxx/logger.h
+++ b/src/main/include/log4cxx/logger.h
@@ -60,22 +60,18 @@
 	private:
 		LOG4CXX_DECLARE_PRIVATE_MEMBER_PTR(LoggerPrivate, m_priv)
 
-	protected:
-		friend class DefaultLoggerFactory;
-
+	public:
 		/**
-		This constructor created a new <code>logger</code> instance and
+		This constructor initializes a new <code>logger</code> instance and
 		sets its name.
 
-		<p>It is intended to be used by sub-classes only. You should not
-		create categories directly.
+		<p>It is intended to be only used by factory-classes.
 
 		@param pool lifetime of pool must be longer than logger.
 		@param name The name of the logger.
 		*/
-		Logger(log4cxx::helpers::Pool& pool, const LogString& name);
+		Logger(helpers::Pool& pool, const LogString& name);
 
-	public:
 		~Logger();
 
 
@@ -568,7 +564,7 @@
 		Return the the LoggerRepository where this
 		<code>Logger</code> is attached.
 		*/
-		log4cxx::spi::LoggerRepositoryPtr getLoggerRepository() const;
+		log4cxx::spi::LoggerRepository* getLoggerRepository() const;
 
 
 		/**
@@ -1408,7 +1404,7 @@
 		/**
 		Only the Hierarchy class can set the hierarchy of a logger.*/
 		void removeHierarchy();
-		void setHierarchy(const spi::LoggerRepositoryPtr& repository);
+		void setHierarchy(spi::LoggerRepository* repository);
 		void setParent(LoggerPtr parentLogger);
 		spi::LoggerRepository* getHierarchy() const;
 
diff --git a/src/main/include/log4cxx/pattern/classnamepatternconverter.h b/src/main/include/log4cxx/pattern/classnamepatternconverter.h
index 8cf7c94..66ce9f9 100644
--- a/src/main/include/log4cxx/pattern/classnamepatternconverter.h
+++ b/src/main/include/log4cxx/pattern/classnamepatternconverter.h
@@ -35,15 +35,13 @@
  */
 class LOG4CXX_EXPORT ClassNamePatternConverter : public NamePatternConverter
 {
+	public:
 		/**
-		 * Private constructor.
 		 * @param options options, may be null.
 		 * @param logger logger for diagnostic messages, may be null.
 		 */
-		ClassNamePatternConverter(
-			const std::vector<LogString>& options);
+		ClassNamePatternConverter(const std::vector<LogString>& options);
 
-	public:
 		DECLARE_LOG4CXX_PATTERN(ClassNamePatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
 		LOG4CXX_CAST_ENTRY(ClassNamePatternConverter)
diff --git a/src/main/include/log4cxx/pattern/colorendpatternconverter.h b/src/main/include/log4cxx/pattern/colorendpatternconverter.h
index 3ad9bd3..fbdae3c 100644
--- a/src/main/include/log4cxx/pattern/colorendpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/colorendpatternconverter.h
@@ -35,11 +35,6 @@
 class LOG4CXX_EXPORT ColorEndPatternConverter
 	: public LoggingEventPatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		ColorEndPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(ColorEndPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -47,6 +42,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		ColorEndPatternConverter();
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/colorstartpatternconverter.h b/src/main/include/log4cxx/pattern/colorstartpatternconverter.h
index 62cd858..fc45bef 100644
--- a/src/main/include/log4cxx/pattern/colorstartpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/colorstartpatternconverter.h
@@ -35,11 +35,6 @@
 class LOG4CXX_EXPORT ColorStartPatternConverter
 	: public LoggingEventPatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		ColorStartPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(ColorStartPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -47,6 +42,9 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		ColorStartPatternConverter();
+
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/datepatternconverter.h b/src/main/include/log4cxx/pattern/datepatternconverter.h
index 3e123ce..229c8db 100644
--- a/src/main/include/log4cxx/pattern/datepatternconverter.h
+++ b/src/main/include/log4cxx/pattern/datepatternconverter.h
@@ -40,13 +40,6 @@
 		struct DatePatternConverterPrivate;
 
 		/**
-		 * Private constructor.
-		 * @param options options, may be null.
-		 * @param logger logger for diagnostic messages, may be null.
-		 */
-		DatePatternConverter(const OptionsList& options);
-
-		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
 		 * @return instance of pattern converter.
@@ -59,6 +52,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		DatePatternConverter(const OptionsList& options);
+
 		~DatePatternConverter();
 
 		static PatternConverterPtr newInstance(
diff --git a/src/main/include/log4cxx/pattern/filelocationpatternconverter.h b/src/main/include/log4cxx/pattern/filelocationpatternconverter.h
index fd59639..d94d61e 100644
--- a/src/main/include/log4cxx/pattern/filelocationpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/filelocationpatternconverter.h
@@ -35,11 +35,6 @@
 class LOG4CXX_EXPORT FileLocationPatternConverter
 	: public LoggingEventPatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		FileLocationPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(FileLocationPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -47,6 +42,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		FileLocationPatternConverter();
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/fulllocationpatternconverter.h b/src/main/include/log4cxx/pattern/fulllocationpatternconverter.h
index 122ee4e..d5b6cae 100644
--- a/src/main/include/log4cxx/pattern/fulllocationpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/fulllocationpatternconverter.h
@@ -35,11 +35,6 @@
 class LOG4CXX_EXPORT FullLocationPatternConverter
 	: public LoggingEventPatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		FullLocationPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(FullLocationPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -47,6 +42,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		FullLocationPatternConverter();
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/integerpatternconverter.h b/src/main/include/log4cxx/pattern/integerpatternconverter.h
index 8149bcf..961148d 100644
--- a/src/main/include/log4cxx/pattern/integerpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/integerpatternconverter.h
@@ -34,11 +34,6 @@
  */
 class LOG4CXX_EXPORT IntegerPatternConverter : public PatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		IntegerPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(IntegerPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -46,6 +41,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(PatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		IntegerPatternConverter();
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/levelpatternconverter.h b/src/main/include/log4cxx/pattern/levelpatternconverter.h
index a6da4da..3ae0c7b 100644
--- a/src/main/include/log4cxx/pattern/levelpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/levelpatternconverter.h
@@ -34,11 +34,6 @@
  */
 class LOG4CXX_EXPORT LevelPatternConverter : public LoggingEventPatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		LevelPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(LevelPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -46,6 +41,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		LevelPatternConverter();
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/linelocationpatternconverter.h b/src/main/include/log4cxx/pattern/linelocationpatternconverter.h
index 4fce9cd..5656c48 100644
--- a/src/main/include/log4cxx/pattern/linelocationpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/linelocationpatternconverter.h
@@ -35,11 +35,6 @@
 class LOG4CXX_EXPORT LineLocationPatternConverter
 	: public LoggingEventPatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		LineLocationPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(LineLocationPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -47,6 +42,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		LineLocationPatternConverter();
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/lineseparatorpatternconverter.h b/src/main/include/log4cxx/pattern/lineseparatorpatternconverter.h
index 4a51368..592f708 100644
--- a/src/main/include/log4cxx/pattern/lineseparatorpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/lineseparatorpatternconverter.h
@@ -35,12 +35,6 @@
 class LOG4CXX_EXPORT LineSeparatorPatternConverter
 	: public LoggingEventPatternConverter
 {
-
-		/**
-		 * Private constructor.
-		 */
-		LineSeparatorPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(LineSeparatorPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -48,6 +42,7 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		LineSeparatorPatternConverter();
 
 		/**
 		 * Obtains an instance of pattern converter.
diff --git a/src/main/include/log4cxx/pattern/literalpatternconverter.h b/src/main/include/log4cxx/pattern/literalpatternconverter.h
index ce66edd..d07a8c6 100644
--- a/src/main/include/log4cxx/pattern/literalpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/literalpatternconverter.h
@@ -41,13 +41,6 @@
 {
 		struct LiteralPatternConverterPrivate;
 
-		/**
-		 * Create a new instance.
-		 * @param literal string literal.
-		 */
-		LiteralPatternConverter(const LogString& literal);
-
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(LiteralPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -55,6 +48,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		LiteralPatternConverter(const LogString& literal);
+
 		static PatternConverterPtr newInstance(const LogString& literal);
 
 		using LoggingEventPatternConverter::format;
diff --git a/src/main/include/log4cxx/pattern/loggerpatternconverter.h b/src/main/include/log4cxx/pattern/loggerpatternconverter.h
index 985f07a..4ff2f1a 100644
--- a/src/main/include/log4cxx/pattern/loggerpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/loggerpatternconverter.h
@@ -35,14 +35,6 @@
  */
 class LOG4CXX_EXPORT LoggerPatternConverter : public NamePatternConverter
 {
-
-		/**
-		 * Private constructor.
-		 * @param options options, may be null.
-		 * @param logger logger for diagnostic messages, may be null.
-		 */
-		LoggerPatternConverter(const std::vector<LogString>& options);
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(LoggerPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -50,6 +42,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(NamePatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		LoggerPatternConverter(const std::vector<LogString>& options);
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/messagepatternconverter.h b/src/main/include/log4cxx/pattern/messagepatternconverter.h
index 8964a5d..5522cc9 100644
--- a/src/main/include/log4cxx/pattern/messagepatternconverter.h
+++ b/src/main/include/log4cxx/pattern/messagepatternconverter.h
@@ -34,12 +34,6 @@
  */
 class LOG4CXX_EXPORT MessagePatternConverter : public LoggingEventPatternConverter
 {
-
-		/**
-		 * Private constructor.
-		 */
-		MessagePatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(MessagePatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -47,6 +41,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		MessagePatternConverter();
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/methodlocationpatternconverter.h b/src/main/include/log4cxx/pattern/methodlocationpatternconverter.h
index e356d90..f0442b3 100644
--- a/src/main/include/log4cxx/pattern/methodlocationpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/methodlocationpatternconverter.h
@@ -35,12 +35,6 @@
 class LOG4CXX_EXPORT MethodLocationPatternConverter
 	: public LoggingEventPatternConverter
 {
-
-		/**
-		 * Private constructor.
-		 */
-		MethodLocationPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(MethodLocationPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -48,6 +42,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		MethodLocationPatternConverter();
+
 		/**
 		 * Obtains an instance of MethodLocationPatternConverter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/ndcpatternconverter.h b/src/main/include/log4cxx/pattern/ndcpatternconverter.h
index c23eea4..6713d5c 100644
--- a/src/main/include/log4cxx/pattern/ndcpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/ndcpatternconverter.h
@@ -34,12 +34,6 @@
  */
 class LOG4CXX_EXPORT NDCPatternConverter : public LoggingEventPatternConverter
 {
-
-		/**
-		 * Private constructor.
-		 */
-		NDCPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(NDCPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -47,6 +41,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		NDCPatternConverter();
+
 		/**
 		 * Obtains an instance of NDCPatternConverter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/propertiespatternconverter.h b/src/main/include/log4cxx/pattern/propertiespatternconverter.h
index f54e349..cc15689 100644
--- a/src/main/include/log4cxx/pattern/propertiespatternconverter.h
+++ b/src/main/include/log4cxx/pattern/propertiespatternconverter.h
@@ -41,13 +41,6 @@
 {
 		struct PropertiesPatternConverterPrivate;
 
-		/**
-		 * Private constructor.
-		 * @param options options, may be null.
-		 * @param logger logger for diagnostic messages, may be null.
-		 */
-		PropertiesPatternConverter(const LogString& name, const LogString& option);
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(PropertiesPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -56,6 +49,12 @@
 		END_LOG4CXX_CAST_MAP()
 
 		/**
+		 * @param options options, may be null.
+		 * @param logger logger for diagnostic messages, may be null.
+		 */
+		PropertiesPatternConverter(const LogString& name, const LogString& option);
+
+		/**
 		 * Obtains an instance of PropertiesPatternConverter.
 		 * @param options options, may be null or first element contains name of property to format.
 		 * @return instance of PropertiesPatternConverter.
diff --git a/src/main/include/log4cxx/pattern/threadpatternconverter.h b/src/main/include/log4cxx/pattern/threadpatternconverter.h
index a9ebf8b..fe362f0 100644
--- a/src/main/include/log4cxx/pattern/threadpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/threadpatternconverter.h
@@ -34,11 +34,6 @@
  */
 class LOG4CXX_EXPORT ThreadPatternConverter : public LoggingEventPatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		ThreadPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(ThreadPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -46,6 +41,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		ThreadPatternConverter();
+
 		/**
 		 * Obtains an instance of ThreadPatternConverter.
 		 * @param options options, currently ignored, may be null.
diff --git a/src/main/include/log4cxx/pattern/threadusernamepatternconverter.h b/src/main/include/log4cxx/pattern/threadusernamepatternconverter.h
index 60bb9ca..b8e2c13 100644
--- a/src/main/include/log4cxx/pattern/threadusernamepatternconverter.h
+++ b/src/main/include/log4cxx/pattern/threadusernamepatternconverter.h
@@ -29,7 +29,6 @@
 
 class LOG4CXX_EXPORT ThreadUsernamePatternConverter : public LoggingEventPatternConverter
 {
-        ThreadUsernamePatternConverter();
 
     public:
 	    DECLARE_LOG4CXX_PATTERN(ThreadUsernamePatternConverter)
@@ -38,6 +37,8 @@
 	    LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 	    END_LOG4CXX_CAST_MAP()
 
+		ThreadUsernamePatternConverter();
+
 	    static PatternConverterPtr newInstance(
 	            const std::vector<LogString>& options);
 
diff --git a/src/main/include/log4cxx/pattern/throwableinformationpatternconverter.h b/src/main/include/log4cxx/pattern/throwableinformationpatternconverter.h
index 2ffe457..83c1940 100644
--- a/src/main/include/log4cxx/pattern/throwableinformationpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/throwableinformationpatternconverter.h
@@ -39,11 +39,6 @@
 {
 		struct ThrowableInformationPatternConverterPrivate;
 
-		/**
-		 * Private constructor.
-		 */
-		ThrowableInformationPatternConverter(bool shortReport);
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(ThrowableInformationPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -51,6 +46,7 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		ThrowableInformationPatternConverter(bool shortReport);
 
 		/**
 		 * Gets an instance of the class.
diff --git a/src/main/include/log4cxx/rolling/rollingpolicybase.h b/src/main/include/log4cxx/rolling/rollingpolicybase.h
index d6d7318..c9fdae2 100644
--- a/src/main/include/log4cxx/rolling/rollingpolicybase.h
+++ b/src/main/include/log4cxx/rolling/rollingpolicybase.h
@@ -98,8 +98,8 @@
 		 * @param buf string buffer to which formatted file name is appended, may not be null.
 		 * @param p memory pool.
 		 */
-		void formatFileName(log4cxx::helpers::ObjectPtr& obj,
-			LogString& buf, log4cxx::helpers::Pool& p) const;
+		void formatFileName(const helpers::ObjectPtr& obj,
+			LogString& buf, helpers::Pool& p) const;
 
 		log4cxx::pattern::PatternConverterPtr getIntegerPatternConverter() const;
 		log4cxx::pattern::PatternConverterPtr getDatePatternConverter() const;
diff --git a/src/test/cpp/helpers/threadutilitytestcase.cpp b/src/test/cpp/helpers/threadutilitytestcase.cpp
index dcd718c..0460b08 100644
--- a/src/test/cpp/helpers/threadutilitytestcase.cpp
+++ b/src/test/cpp/helpers/threadutilitytestcase.cpp
@@ -33,7 +33,7 @@
 public:
 	void testNullFunctions()
 	{
-		ThreadUtilityPtr thrUtil = ThreadUtility::instance();
+		auto thrUtil = ThreadUtility::instance();
 
 		thrUtil->configureFuncs( nullptr, nullptr, nullptr );
 
@@ -44,7 +44,7 @@
 
 	void testCustomFunctions()
 	{
-		ThreadUtilityPtr thrUtil = ThreadUtility::instance();
+		auto thrUtil = ThreadUtility::instance();
 		int num_pre = 0;
 		int num_started = 0;
 		int num_post = 0;
@@ -79,7 +79,7 @@
 	{
 		ThreadUtility::configure( ThreadConfigurationType::BlockSignalsAndNameThread );
 
-		ThreadUtilityPtr thrUtil = ThreadUtility::instance();
+		auto thrUtil = ThreadUtility::instance();
 
 		std::thread t = thrUtil->createThread( LOG4CXX_STR("FooName"), []() {} );
 
diff --git a/src/test/cpp/loggertestcase.cpp b/src/test/cpp/loggertestcase.cpp
index afc520d..1ab5cd7 100644
--- a/src/test/cpp/loggertestcase.cpp
+++ b/src/test/cpp/loggertestcase.cpp
@@ -228,7 +228,7 @@
 		LoggerPtr root = Logger::getRootLogger();
 		root->addAppender(caRoot);
 
-		LoggerRepositoryPtr h = LogManager::getLoggerRepository();
+		auto h = LogManager::getLoggerRepository();
 
 		//h.disableDebug();
 		h->setThreshold(Level::getInfo());