有人可以解释如果你不是Dispose某个IDisposable实体(通过using或直接Dispose电话)可能会发生什么?
这是否总是导致内存泄漏?如果是,C#内存泄漏类似于C++内存泄漏,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允许被调用的析构函数释放已分配的内存,只是好奇.
Windows将wchar_t符号定义为16位长.但是,使用的UTF-16编码告诉我们一些符号实际上可能用4个字节(32位)编码.
这是否意味着如果我正在为Windows以下声明开发应用程序:
wchar_t symbol = ... // Whatever
Run Code Online (Sandbox Code Playgroud)
可能只代表实际符号的一部分?
如果我*nix在wchar_t32位长的地方做同样的事情会发生什么?
是否C#提供了使用反射从头开始创建Enum类型的方法?
假设,我有一个集合strings:{"Single", "Married", "Divorced"}我愿意在运行时构建以下枚举类型:
enum PersonStatus
{
Single, Married, Divorced
}
Run Code Online (Sandbox Code Playgroud)
这有点可能吗?
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?
这是否意味着该示例(请参阅链接)不好,因为该对象可能处于无效状态?
而且,我怀疑在这种情况下,流畅的建筑方法实际上失去了它的"美丽",不是吗?
我正在使用svn版本控制并有以下问题:
假设我在我的feature branch不断上游的变化中开发了一些东西trunk (通过简单地合并它们并解决冲突)。现在,在某个时刻,我进行了最后一次上游合并trunk并解决了冲突。并且,例如,在那之后merge我以某种方式设法“冻结”trunk - 所有提交都被trunk拒绝,并且它始终保持在相同的状态。
这是否可以保证我执行merge --reintegratefor my时不会发生冲突feature branch?或者我错过了一些可能导致它们的其他条件和行动?
C#我正在尝试为读取不同文件的小例程编写集成测试。
而且,我无意中想到进行一个测试会很棒,该测试指定了对该文件的访问被拒绝时的情况的行为。
有谁知道在测试沙箱中模拟它的一种好又简单的方法?
我怀疑这可以使用以下方法进行模拟DirectorySecurity,,但是,我不确定是否可以在所有情况下正确执行此操作:
例如,假设我可以删除正在运行测试的当前用户的访问规则(这也需要 UAC/Elevation)。
我想在这种情况下,我将失去恢复这些权利并在测试完成后正确处置我的沙箱的能力(无需深入研究模拟和访问令牌操作等内容)。
我可能可以使用Moles任何其他基于模拟的方法来做到这一点,但我对通用解决方案更感兴趣(例如,为本机应用程序重用此测试)。
我缺少什么?有什么简单的方法可以做到这一点吗?
我最近尝试构建自己的共享和弱指针.使用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) 我有某种意识形态问题,所以:
假设我有一些模板化的功能
template <typename Stream>
void Foo(Stream& stream, Object& object) { ... }
Run Code Online (Sandbox Code Playgroud)
这确实与该东西object和stream (例如,串行化该对象到流或类似的东西).
假设我也添加了一些简单的包装器(并且假设这些包装器的数量等于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)
我知道这可能不是编码中最重要的部分,这些解决方案实际上是相同的,但我只是不知道"正确"的方法来实现它.
谢谢.
有没有办法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?)容器实现了固定大小和基于堆的数组? …