所以,我愿意像这样构建我的项目:
ClassA.cpp:
class ClassA {
public:
static ClassA* create() {
return new ClassA();
}
void methodA() {
// stuff here
}
void methodB() {
// more stuff here
}
private:
ClassA() {
}
void privateMethodOne() {
//yadda yadda
}
int attributeA;
char attributeB;
};
Run Code Online (Sandbox Code Playgroud)
ClassA.hpp:
class ClassA {
public:
ClassA* create();
void methodA();
void methodB();
private:
ClassA();
};
Run Code Online (Sandbox Code Playgroud)
我将只使用指针工作,我想知道这种方法是否会在将来产生错误.我想知道这里是否存在陷阱.假设.hpp是自动生成的,因此除了私有成员之外,它们具有完全相同的成员.
这个想法是"尝试you()
,如果尝试失败_do()
,如果失败则报告第一次尝试的异常,即you()
".
void that_thing() {
try {
you();
} catch( ... ) {
bool error=false;
try {
_do();
} catch( ... ) {
error = true;
}
if( error ) throw;
}
}
Run Code Online (Sandbox Code Playgroud)
用Gcc测试它工作得很好,我想知道它是否适用于任何编译器.为了更清楚,我期待的奇怪行为是throw;
重新抛出内部异常.
编辑:这个问题不是关于最内在的问题catch
,而是关于在捕获最内层之后重新抛出外部异常.问题是,如果这种重新抛出在法律上肯定没有在被指向相似的问题上接近.
我有一段这样的代码:
set<string>::iterator it1;
set<string>::iterator it2;
pair<set<string>::iterator,bool> ret;
set<string> s;
ret = s.insert("bbbb1");
it1 = ret.first;
ret = s.insert("bbbb2");
it2 = ret.first;
map<set<string>::iterator, set<string>::iterator> m;
m.insert(make_pair(it1,it2));
Run Code Online (Sandbox Code Playgroud)
但最后一行"m.insert(make_pair(it1,it2));" 失败..
在StackOverflow上查看我在使用C++ 11标准时发现在Clang ++上,如果已经为您的类定义了一个移动构造函数,则隐式构造函数生成被禁用,即复制构造函数被"删除已删除".
有没有办法禁用这种行为?
此外,这种行为是否标准化?因为我在GCC中没有相同的行为.
我的linux(Ubuntu)的手册页,没有提到需要NULL作为最后一个参数,minix版本的手册页execl
提到需要NULL作为最后一个参数.然而,我在调用时遇到了奇怪的行为modprobe
,我解决了将NULL作为最后一个参数的问题.
对我有用的方式:
execl("/sbin/modprobe","modprobe","pl2303",NULL);
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
execl("/sbin/modprobe","modprobe","pl2303")
Run Code Online (Sandbox Code Playgroud)
我收到错误号14(EFAULT).`
假设那个sizeof(void*) == sizeof(size_t)
哈希指针只是将其转换为size_t
.所以我想知道我的集合是否包含一个元素,它会更快std::set<void*>
还是std::unordered_set<void*>
?
我知道怎么std::set
运作,但我不熟悉std::unordered_set
.好吧,我知道无序集使用散列和桶,如果没有交叉(这是我的情况),复杂性是O(1).但我不知道这种复杂程度有多大.
如果容器中的日期相关,我的实际情况使用不到一百¹.但是我的好奇心只涉及几个元素和很多元素的情况.
¹元素的数量很少,甚至std::vector
可以表现良好.