gpt4 book ai didi

c++ - auto_ptr 的模板特化

转载 作者:太空狗 更新时间:2023-10-29 21:08:41 27 4
gpt4 key购买 nike

也许我把事情搞得太复杂了,但话又说回来,我确实有点喜欢干净的界面。假设我想要一个 fstream 的 auto_ptr 特化 - 我想要一个通用案例的默认 fstream,但允许替换指针?

 template <> 
class auto_ptr<fstream> {
static fstream myfStream;
fstream* ptr;

public:
auto_ptr() {
// set ptr to &myfStream;
}
reset(fstream* newPtr) {
// free old ptr if not the static one.
ptr = newPtr
};
}

您会考虑一些不同的或更优雅的东西吗?您将如何防止上述内容在该特定编译单元之外传播?

[实际模板是一个 boost::scoped_ptr。]

编辑:

这是一个人为的例子。忽略 fstream - 它是关于为 auto_ptr 提供对象的默认实例。我可能不想提供专门的实例,但想为这个静态默认对象保留 auto_ptr 语义。

class UserClass { 
public:
auto_ptr<fstream> ptr;
UserClass() { }
}

我可能不会在构造时提供动态对象——我仍然希望它有一个有意义的默认值。因为我不是在看所有权转移语义,所以我的指针类指向静态分配的对象真的无关紧要,不是吗?

最佳答案

这不会有好结果。最大的问题是 std::auto_ptr 在其析构函数中删除了底层对象。这意味着您的默认参数不能是静态的。您可以做出的唯一选择是在那里做很多黑客攻击,恕我直言,您在维护所有糟糕代码的同时付出的代价不值得您拥有的小优势。

关于c++ - auto_ptr<T> 的模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2592746/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com