mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-02 03:39:43 -06:00
cmTarget: Use std::unique_ptr instead of custom smart pointer
To manage the lifetime of `cmTargetInternals`, the private implementation of `cmTarget`, use `std::unique_ptr<cmTargetInternals>` instead of `cmTargetInternalPointer`, which is removed. `cmTarget` is made non-copyable but movable.
This commit is contained in:
@@ -215,6 +215,7 @@ public:
|
||||
|
||||
cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
|
||||
Visibility vis, cmMakefile* mf)
|
||||
: impl(cm::make_unique<cmTargetInternals>())
|
||||
{
|
||||
assert(mf);
|
||||
impl->TargetType = type;
|
||||
@@ -500,6 +501,11 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
|
||||
}
|
||||
}
|
||||
|
||||
cmTarget::cmTarget(cmTarget&&) noexcept = default;
|
||||
cmTarget::~cmTarget() = default;
|
||||
|
||||
cmTarget& cmTarget::operator=(cmTarget&&) noexcept = default;
|
||||
|
||||
cmStateEnums::TargetType cmTarget::GetType() const
|
||||
{
|
||||
return impl->TargetType;
|
||||
@@ -1967,37 +1973,3 @@ bool cmTarget::GetMappedConfig(std::string const& desired_config,
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
cmTargetInternalPointer::cmTargetInternalPointer()
|
||||
{
|
||||
this->Pointer = new cmTargetInternals;
|
||||
}
|
||||
|
||||
cmTargetInternalPointer::cmTargetInternalPointer(
|
||||
cmTargetInternalPointer const& r)
|
||||
{
|
||||
// Ideally cmTarget instances should never be copied. However until
|
||||
// we can make a sweep to remove that, this copy constructor avoids
|
||||
// allowing the resources (Internals) to be copied.
|
||||
this->Pointer = new cmTargetInternals(*r.Pointer);
|
||||
}
|
||||
|
||||
cmTargetInternalPointer::~cmTargetInternalPointer()
|
||||
{
|
||||
delete this->Pointer;
|
||||
}
|
||||
|
||||
cmTargetInternalPointer& cmTargetInternalPointer::operator=(
|
||||
cmTargetInternalPointer const& r)
|
||||
{
|
||||
if (this == &r) {
|
||||
return *this;
|
||||
} // avoid warning on HP about self check
|
||||
// Ideally cmTarget instances should never be copied. However until
|
||||
// we can make a sweep to remove that, this copy constructor avoids
|
||||
// allowing the resources (Internals) to be copied.
|
||||
cmTargetInternals* oldPointer = this->Pointer;
|
||||
this->Pointer = new cmTargetInternals(*r.Pointer);
|
||||
delete oldPointer;
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "cmConfigure.h" // IWYU pragma: keep
|
||||
|
||||
#include <iosfwd>
|
||||
#include <memory> // IWYU pragma: keep
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
@@ -26,20 +27,6 @@ class cmPropertyMap;
|
||||
class cmSourceFile;
|
||||
class cmTargetInternals;
|
||||
|
||||
class cmTargetInternalPointer
|
||||
{
|
||||
public:
|
||||
cmTargetInternalPointer();
|
||||
cmTargetInternalPointer(cmTargetInternalPointer const& r);
|
||||
~cmTargetInternalPointer();
|
||||
cmTargetInternalPointer& operator=(cmTargetInternalPointer const& r);
|
||||
cmTargetInternals* operator->() const { return this->Pointer; }
|
||||
cmTargetInternals* Get() const { return this->Pointer; }
|
||||
|
||||
private:
|
||||
cmTargetInternals* Pointer;
|
||||
};
|
||||
|
||||
/** \class cmTarget
|
||||
* \brief Represent a library or executable target loaded from a makefile.
|
||||
*
|
||||
@@ -55,9 +42,6 @@ public:
|
||||
VisibilityImportedGlobally
|
||||
};
|
||||
|
||||
cmTarget(std::string const& name, cmStateEnums::TargetType type,
|
||||
Visibility vis, cmMakefile* mf);
|
||||
|
||||
enum CustomCommandType
|
||||
{
|
||||
PRE_BUILD,
|
||||
@@ -65,6 +49,16 @@ public:
|
||||
POST_BUILD
|
||||
};
|
||||
|
||||
cmTarget(std::string const& name, cmStateEnums::TargetType type,
|
||||
Visibility vis, cmMakefile* mf);
|
||||
|
||||
cmTarget(cmTarget const&) = delete;
|
||||
cmTarget(cmTarget&&) noexcept;
|
||||
~cmTarget();
|
||||
|
||||
cmTarget& operator=(cmTarget const&) = delete;
|
||||
cmTarget& operator=(cmTarget&&) noexcept;
|
||||
|
||||
///! Return the type of target.
|
||||
cmStateEnums::TargetType GetType() const;
|
||||
|
||||
@@ -263,7 +257,7 @@ private:
|
||||
cmStateEnums::ArtifactType artifact) const;
|
||||
|
||||
private:
|
||||
cmTargetInternalPointer impl;
|
||||
std::unique_ptr<cmTargetInternals> impl;
|
||||
};
|
||||
|
||||
typedef std::unordered_map<std::string, cmTarget> cmTargets;
|
||||
|
||||
Reference in New Issue
Block a user