相关疑难解决方法(0)

理解术语和概念的含义 - RAII(资源获取是初始化)

您能否请C++开发人员详细介绍RAII是什么,为什么重要,以及它是否与其他语言有任何关联?

我做知道一点点.我相信它代表"资源获取是初始化".但是,这个名称并不符合我对RAII的理解(可能不正确):我得到的印象是RAII是一种初始化堆栈中对象的方式,当这些变量超出范围时,析构函数会自动被称为导致资源被清理.

那么为什么不称为"使用堆栈触发清理"(UTSTTC :)?你怎么从那里到"RAII"?

你怎么能在堆栈上创建一些东西来清理堆上的东西呢?此外,是否有不能使用RAII的情况?你有没有发现自己希望收集垃圾?至少一个垃圾收集器,你可以使用一些对象,同时让其他人管理?

谢谢.

c++ garbage-collection raii resource-management

108
推荐指数
7
解决办法
1万
查看次数

您使用哪些C++标准库包装函数?

今天早上问的这个问题让我想知道你认为C++标准库中缺少哪些功能,以及你如何用填充函数填补空白.例如,我自己的实用程序库具有此向量追加功能:

template <class T>
std::vector<T> & operator += ( std::vector<T> & v1,
                               const std::vector <T> & v2 ) {
    v1.insert( v1.end(), v2.begin(), v2.end() );
    return v1;
}
Run Code Online (Sandbox Code Playgroud)

这个用于清除(或多或少)任何类型 - 特别适用于像std :: stack这样的东西:

template <class C>
void Clear( C & c ) {
    c = C();
}
Run Code Online (Sandbox Code Playgroud)

我还有一些,但我对你使用的是哪些感兴趣?请限制包装函数的答案- 即不超过几行代码.

c++

81
推荐指数
12
解决办法
9584
查看次数

经典C++(C with Classes)的调用/返回功能,现代语言有什么用?

在C++的设计和演变的第57页上,Stroustrup博士讨论了一个最初属于C with Classes的功能,但它不是现代C++(标准C++)的一部分.该功能被调用call/return.这是一个例子:

class myclass
{
  call() { /* do something before each call to a function. */ }
  return() { /* do something else after each call to a function. */ }
  ...
};
Run Code Online (Sandbox Code Playgroud)

我觉得这个功能非常有趣.任何现代语言都有这个特殊功能吗?

c++ aop language-features programming-languages

10
推荐指数
1
解决办法
504
查看次数

如何在C#中做Sentry模式?

在C++中,我习惯使用sentry模式来确保在块或函数退出时正确释放所获取的资源(例如,参见此处).例如,我使用它来获取图形状态,然后我可以做任何我想要的状态,当sentry对象(引用)超出范围时它会被放回去.

现在我正在使用C#,同样的技巧不起作用,因为析构函数不会被调用,直到谁知道 - 以后.

是否有一些OTHER方法可以保证在释放对象的最后一个引用时触发?或者我只需要记住在从我将使用哨兵的任何方法返回之前调用一些Restore()或Apply()或DoYourThing()方法?

c# c++ design-patterns

5
推荐指数
2
解决办法
522
查看次数