如果在模板 class 中使用动态分配的元素,我该如何解除分配或自动解除分配?
If dynamically allocated element used in templated class how can I deallocate or does it deallocate automatically?
我有这种模板class
template<class T>
class myClass
{
public:
.
myClass(const T & element);
.
private:
T element;
};
并且我在 main
中使用动态分配的元素作为 T
struct Node
{
.
.
};
int main()
{
myClass<Node*> obj(new Node);
}
如何释放 new 关键字占用的 space 还是在调用 myClass 的析构函数时自动完成?
这是 C++ 的常见问题。
看这里:https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#r-resource-management
CppCoreGuidelines 为您提供了处理内存的合理方法。
考虑阅读 RAII 和 Smart-Pointers(CppCoreGuidelines 中包含的所有内容)。
无需自己管理内存。使用 std::unique_ptr
template<class T>
class myClass
{
public:
myClass(std::unique_ptr<T> ptr) : element(std::move(ptr)) { };
private:
std::unique_ptr<T> element;
};
然后像这样使用它
myClass<Node> obj(std::make_unique<Node>()); // note that I removed the *
我有这种模板class
template<class T>
class myClass
{
public:
.
myClass(const T & element);
.
private:
T element;
};
并且我在 main
中使用动态分配的元素作为 Tstruct Node
{
.
.
};
int main()
{
myClass<Node*> obj(new Node);
}
如何释放 new 关键字占用的 space 还是在调用 myClass 的析构函数时自动完成?
这是 C++ 的常见问题。 看这里:https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#r-resource-management
CppCoreGuidelines 为您提供了处理内存的合理方法。 考虑阅读 RAII 和 Smart-Pointers(CppCoreGuidelines 中包含的所有内容)。
无需自己管理内存。使用 std::unique_ptr
template<class T>
class myClass
{
public:
myClass(std::unique_ptr<T> ptr) : element(std::move(ptr)) { };
private:
std::unique_ptr<T> element;
};
然后像这样使用它
myClass<Node> obj(std::make_unique<Node>()); // note that I removed the *