所以,我一直在做一些图书馆开发并陷入两难境地.图书馆是私人的,所以我无法分享,但我觉得这可能是一个有意义的问题.
这种困境本身就是为什么库中的资源处理类没有默认构造函数的问题.该类处理特定的文件结构,这并不重要,但我们可以调用类Quake3File.
然后请求实现默认构造函数和"适当的"Open/Close方法.我的思路是RAII风格,即如果你创建了一个类的实例化,你必须给它一个它处理的资源.这样做可以确保任何和所有成功构造的句柄都有效,IMO可以消除一整类错误.
我的建议是保持一个(智能)指针,然后不必实现打开/关闭并打开一堆蠕虫,用户在免费商店创建类"打开"它并删除是你想要的时候"关闭"它.当它超出范围时,使用智能指针甚至会"关闭"它.
这就是冲突的来源,我喜欢模仿类的STL设计,因为这使我的类更容易使用.因为我正在创建一个基本上处理文件的类,如果我以std :: fstream为指导,那么我不确定是否应该实现默认构造函数.整个std :: fstream层次结构的事实让我指出是的,但我自己的想法是否定的.
所以问题或多或少都是:
希望我的问题得到理解.谢谢.
因此,似乎在C++ 11中不再需要堆栈中.top和.pop的隔离.
也许我错过了一些东西,但是C++ 03和之前的问题是如果.pop要返回一个值,那么复制操作可能会在元素复制期间抛出异常.示例(代码示例取自此处):
template <class T>
// T must have default ctor and copy assignment
class Stack
{
public:
Stack();
~Stack();
Stack(const Stack&);
Stack& operator=(const Stack&);
unsigned Count(); // returns # of T's in the stack
void Push(const T&);
T Pop(); // if empty, returns default-
// constructed T
T Top(); // For backwards compatibility
//
private:
T* v_; // pointer to a memory area big
// enough for 'vsize_' T objects
unsigned vsize_; // the size …Run Code Online (Sandbox Code Playgroud)