【发布时间】:2021-12-04 14:59:32
【问题描述】:
如果我有一个全局变量或堆栈变量,我可以将它传递给一个函数,该函数采用 std::shared_ptr 和这样的模板类:
template<class T> class shared_ptr_stack:public std::shared_ptr<T> {
public:
shared_ptr_stack(T * target):std::shared_ptr<T>(target, [](T * t){}){};
};
};
目标是避免在没有引用时破坏或删除内存。代码在测试中编译和工作,但我担心我会调用未定义的行为或其他一些负面问题。
【问题讨论】:
-
如果您的目标是避免堆分配,那么您还没有实现它,因为 shared_ptr 仍然需要分配其控制结构。如果你不想避免堆分配......为什么不直接使用堆而不是堆栈?
-
从不是为它设计的类的公共继承是一个坏主意。您可以改为引入一个全局函数
make_shared_stack<T>,它构造一个带有无操作删除器的shared_ptr。 -
那将是等待发生的未定义行为。该函数可能需要
shared_ptr是有原因的——我怀疑它会将指针隐藏在某个地方以备后用。您计划将一个很快超出范围的局部变量交给它,从而使隐藏的指针悬空。 -
@Eugene 如果从非为继承而设计的类派生的类没有成员,只有辅助函数会出现什么样的问题?
标签: c++ shared-ptr