小编Job*_*ick的帖子

自我释放(参考计数)singelton

请考虑以下情形:您有一个代表某种数据提供者的单例类.这个单例类分配了大量的内存,你希望它在没有人使用时释放它的已分配内存.流:

  1. A类调用getInstance并使用singleton(这是第一次调用getInstance而singleton类分配了巨大的内存块)
  2. B类调用getInstance并使用singleton
  3. A级和B级"死亡"(现在没有人使用单身人士)
  4. 程序仍在运行,但单例的内存未释放.

你如何建议在第3阶段实现单例(A类和B类"死")将释放内存(我知道java使用垃圾收集,但仍然可以说我想要以下内存= null).

PS我不想强制每个类在单例停止使用它时使用单例调用释放.我希望单身人士自己处理"释放"记忆.

java singleton garbage-collection memory-management

8
推荐指数
1
解决办法
1425
查看次数

带有泛型委托的 C# GetDelegateForFunctionPointer

我需要动态调用dll函数。

我正在使用标准 Windows API 来加载 dll 并获取 proc 地址。

在检索 proc 的 IntPtr 后,我尝试将其转换为委托:

Func<int> inv = (Func<int>)Marshal.GetDelegateForFunctionPointer(proc, typeof(Func<int>));
Run Code Online (Sandbox Code Playgroud)

但它失败了,因为 typeof(Func) 返回泛型类型。

有没有什么干净的方法来完成我想要做的事情,而无需声明成员委托并将其用作类型?

我的意思是我正在努力避免以下冗余:

//I need this member only for typeof operator
private delegate int RunDll();
RunDll inv = (RunDll)Marshal.GetDelegateForFunctionPointer(proc, typeof(RunDll));
Run Code Online (Sandbox Code Playgroud)

c#

6
推荐指数
2
解决办法
6936
查看次数

绑定函数(委托)参数

我试图在不使用 lambda 函数的情况下实现以下目标:

Func<bool> test = () => RunSomething("test");  <-- This work fine but creates lambda
Func<bool> test = bind(RunSomething, "test"); <-- Bind "test" to RunSomething  
Run Code Online (Sandbox Code Playgroud)

换句话说,我想知道是否有可能以某种方式绑定函数和参数。
在 C++ 中使用 std::bind 是可能的,但在 C# 中可能吗?

c# lambda delegates bind callback

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

如何将可变参数模板参数绑定到函数

我正在尝试模仿 std::thread 构造函数功能:

template< class Function, class... Args > 
explicit thread( Function&& f, Args&&... args );
Run Code Online (Sandbox Code Playgroud)

我试过使用调试器来查看它是如何工作的,但我无法弄清楚。

如何像线程的构造函数那样创建和存储绑定类型?

像这样(语法可能错误):

class myClass{
private:
auto bindType;

public:
template< class Function, class... Args > 
explicit myClass( Function&& f, Args&&... args ) : bindType(somehowBind(f, args) {}
void evaluate() {bindType();}
};
Run Code Online (Sandbox Code Playgroud)

用法示例:

int test(int i) {return i;}

int main(){
myClass my(test, 5);
my.evaluate();
}
Run Code Online (Sandbox Code Playgroud)

请注意,我不在乎somehowBind函数是否会忽略返回类型,即它的返回类型可以是 std::function 之类的东西。我不想做的就是了解我如何绑定class... Args到给定的函数f,以便在调用后somehowBind它会像 std::bind 一样。为了澄清我的观点,您可以考虑我想要实现的目标如下:

thread t(test, 5); // unlike the usual …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

4
推荐指数
1
解决办法
2599
查看次数

为STL算法lambda调整std :: pair

假设我有std :: pair的STL容器.有没有办法使用boost来调整对的第二个STL算法lambda?

std::vector<std::pair<int, SomeStruct>> vec;
const auto Predicate = [](SomeStruct const& s) { ... };
auto it = std::find_if(vec.begin(), vec.end(), boost-magic(Predicate));
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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