小编Yip*_*Yay的帖子

C#处理IDisposable

有人可以解释如果你不是Dispose某个IDisposable实体(通过using或直接Dispose电话)可能会发生什么?

这是否总是导致内存泄漏?如果是,C#内存泄漏类似于C++内存泄漏,C#从这个角度来看,它们很容易导致崩溃或沙箱更安全?

谢谢.

c# dispose memory-leaks idisposable

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

C++基本异常问题

有人可以描述一下处理以下情况的正确方法:

wchar_t* buffer = new wchar_t[...];

if (!something)
{
    throw std::runtime_error("Whatever");
    // Now, at this point I'm leaking memory allocated for the 'buffer'.
}

// Perform actions.
delete[] buffer;
Run Code Online (Sandbox Code Playgroud)

解决它的明显方法意味着:

if (!something)
{
    delete[] buffer;
    throw std::runtime_error("Whatever");
}
Run Code Online (Sandbox Code Playgroud)

现在 - 好吗?(我怀疑是这样,但谁知道:)


PS我确实意识到有一种更好的方法 - 使用boost::scoped_array或简单地std::wstring允许被调用的析构函数释放已分配的内存,只是好奇.

c++ exception throw

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

宽字符Windows

Windows将wchar_t符号定义为16位长.但是,使用的UTF-16编码告诉我们一些符号实际上可能用4个字节(32位)编码.

这是否意味着如果我正在为Windows以下声明开发应用程序:

wchar_t symbol = ... // Whatever
Run Code Online (Sandbox Code Playgroud)

可能只代表实际符号的一部分?


如果我*nixwchar_t32位长的地方做同样的事情会发生什么?

c++ windows unicode utf-16

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

使用反射创建枚举

是否C#提供了使用反射从头开始创建Enum类型的方法?

假设,我有一个集合strings:{"Single", "Married", "Divorced"}我愿意在运行时构建以下枚举类型:

enum PersonStatus
{
    Single, Married, Divorced
}
Run Code Online (Sandbox Code Playgroud)

这有点可能吗?

c# reflection enums runtime

4
推荐指数
2
解决办法
3216
查看次数

带构建器的C#构造对象

Fluent构建器是一种众所周知的模式,用于构建具有许多属性的对象:

Team team = teamBuilder.CreateTeam("Chelsea")
    .WithNickName("The blues")
    .WithShirtColor(Color.Blue)
    .FromTown("London")
    .PlayingAt("Stamford Bridge");
Run Code Online (Sandbox Code Playgroud)

但是,由于一个特殊原因,使用它对我来说似乎不太清楚:

  • 每个Team对象都有其最小的操作状态,换句话说,必须设置的属性集(必需),以便对象可以使用.

现在,Fluent builder考虑到你必须保持这种状态,应该如何使用这种方法?

With_XYZ成员是否应该修改对象的一部分,这不会影响这种状态?

也许这种情况有一些一般规则?


更新:

如果该CreateTeam方法应该将强制属性作为参数,接下来会发生什么?

  • 如果我(例如)省略WithNickName呼叫会怎样?

  • 这是否意味着昵称应该默认为某些DefaultNickname

  • 这是否意味着该示例(请参阅链接)不好,因为该对象可能处于无效状态?

  • 而且,我怀疑在这种情况下,流畅的建筑方法实际上失去了它的"美丽",不是吗?

c# constructor design-patterns fluent-interface builder

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

Subversion 重新整合分支冲突

我正在使用svn版本控制并有以下问题:

  • 假设我在我的feature branch不断上游的变化中开发了一些东西trunk (通过简单地合并它们并解决冲突)。现在,在某个时刻,我进行了最后一次上游合并trunk并解决了冲突。并且,例如,在那之后merge我以某种方式设法“冻结”trunk - 所有提交都被trunk拒绝,并且它始终保持在相同的状态。

  • 这是否可以保证我执行merge --reintegratefor my时不会发生冲突feature branch?或者我错过了一些可能导致它们的其他条件和行动?

svn version-control merge conflict feature-branch

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

在 C# / Windows 中模拟文件的“访问被拒绝”

C#我正在尝试为读取不同文件的小例程编写集成测试。

而且,我无意中想到进行一个测试会很棒,该测试指定了对该文件的访问被拒绝时的情况的行为。

有谁知道在测试沙箱中模拟它的一种好又简单的方法?


  • 我怀疑这可以使用以下方法进行模拟DirectorySecurity,,但是,我不确定是否可以在所有情况下正确执行此操作:

    例如,假设我可以删除正在运行测试的当前用户的访问规则(这也需要 UAC/Elevation)。

    我想在这种情况下,我将失去恢复这些权利并在测试完成后正确处置我的沙箱的能力(无需深入研究模拟和访问令牌操作等内容)。

  • 我可能可以使用Moles任何其他基于模拟的方法来做到这一点,但我对通用解决方案更感兴趣(例如,为本机应用程序重用此测试)。

我缺少什么?有什么简单的方法可以做到这一点吗?

c# windows testing file

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

C++ - 使用GCC编译时,'operator ='不匹配

我最近尝试构建自己的共享和弱指针.使用Visual Studio编译的代码无法在GCC(4.5.0)中编译,但出现以下错误:

main.cpp: In function 'int main()':
main.cpp:18:27: error: no match for 'operator=' in 'wp1 = weak_ptr<int>(((const shared_ptr<int>&)((const shared_ptr<int>*)(& sp1))))'
weak_ptr.h:59:9: note: candidate is: void weak_ptr<T>::operator=(weak_ptr<T>&) [with T = int, weak_ptr<T> = weak_ptr<int>]
Run Code Online (Sandbox Code Playgroud)

以下是我的代码中最重要的部分:

1)弱指针实现(注意声明operator=)

#include "smart_ptr_wrapper.hpp"
#include "shared_ptr.h"

template <typename T>
class weak_ptr {
private:
   // Weak wrapper implementation
   typedef smart_ptr_wrapper<T> weak_ptr_wrapper;
   weak_ptr_wrapper* wrapper;

private:
   // Shared wrapper additional routines
   void increase_reference_count() {
      ++(wrapper->weak_count);
   }
   void decrease_reference_count() {
      --(wrapper->weak_count);

      // Dispose the wrapper if there are no …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction gcc no-match operator-keyword

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

C++ - 在哪里抛出异常?

我有某种意识形态问题,所以:

假设我有一些模板化的功能

template <typename Stream>
void Foo(Stream& stream, Object& object) { ... }
Run Code Online (Sandbox Code Playgroud)

这确实与该东西objectstream (例如,串行化该对象到流或类似的东西).

假设我也添加了一些简单的包装器(并且假设这些包装器的数量等于2或3):

void FooToFile(const std::string& filename, Object& object)
{
   std::ifstream stream(filename.c_str());
   Foo(stream, object);
}
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:

在这种情况下(在意识形态上),如果我的stream情况不好,我应该抛出异常吗?我应该在每个包装器中执行此操作,还是只将该检查移动到我的Foo,以便它的主体看起来像

if (!foo.good()) throw (something);
// Perform ordinary actions
Run Code Online (Sandbox Code Playgroud)

我知道这可能不是编码中最重要的部分,这些解决方案实际上是相同的,但我只是不知道"正确"的方法来实现它.

谢谢.

c++ exception stream

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

C++ - STL矢量问题

有没有办法std::vector加快速度reserving + resizing

我想实现与普通C数组相当的性能.

请参阅以下代码段:

TEST(test, vector1) {
   for (int i = 0; i < 50; ++i) {
      std::vector<int> a;
      a.reserve(10000000);
      a.resize(10000000);
   }
}

TEST(test, vector2) {
   for (int i = 0; i < 50; ++i) {
      std::vector<int> a(10000000);
   }
}

TEST(test, carray) {
   for (int i = 0; i < 50; ++i) {
      int* new_a = new int[10000000];
      delete[] new_a;
   }
}
Run Code Online (Sandbox Code Playgroud)

前两个测试慢两倍(4095 ms vs 2101 ms),显然,这std::vector是因为它使元素中的元素为空.有关如何避免这种情况的任何想法?

或者可能有一些标准(boost?)容器实现了固定大小和基于堆的数组? …

c++ arrays performance vector

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