小编Yip*_*Yay的帖子

哪些对象有资格进行垃圾回收?

这是我最近在采访中被问到的一个问题:在"GC.Collect()"调用期间会收集哪些"随机"对象?

String a = new Random().Next(0, 1) ==1 ? "Whatever 1" : "Whatever 2";

String b = new WeakReference(new Random()).Target.Next(0, 1) == 1 ?
    "Whatever 1" : "Whatever 2";

GC.Collect();
Run Code Online (Sandbox Code Playgroud)

我回答说这是一个特定于实现的问题,它高度依赖于GC实现和相应的弱引用语义.据我所知,C#规范没有提供GC.Collect应该做什么以及如何处理弱引用的准确描述.

但是,我的采访者想听别的.

c# garbage-collection weak-references

12
推荐指数
2
解决办法
555
查看次数

在哪里可以找到可以打开常见3D文件格式的C++ 3D建模库?

有人知道任何C++库/接口来处理常见格式的三维模型数据(.obj,.3ds,.ply,...)?

我可以找到一些库,比如lib3ds或者libobj,但如果我想处理不同的对象格式,我真的需要习惯它们的API并编写一堆我自己的包装器,这样我的代码就不会转变得一团糟.

所以,我很感兴趣,如果有一些替代品(甚至商业),但它们的行为就像一个swiss knife不同的3D模型格式的大军?

谢谢.

c++ 3d object

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

C#访问派生类中的受保护成员

我写了以下代码:

public class A                             
{
    protected string Howdy = "Howdy!";     
}

public class B : A                           
{
    public void CallHowdy()
    {
        A a = new A();
        Console.WriteLine(a.Howdy);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,在VS2010其中导致以下编译错误:

无法通过"A"类型的限定符访问受保护的成员"Aa"; 限定符必须是'B'类型(或从中派生).

这对我来说似乎很不合逻辑 - 为什么我不能protected从类的方法访问类实例的字段,这是从它派生的?

那么,为什么会这样呢?


找到了严格的答案 - http://blogs.msdn.com/b/ericlippert/archive/2005/11/09/491031.aspx

c# encapsulation protected derived-class visual-studio-2010

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

静态一次性物体

  • 我该如何管理static带有一次性物品的课程?有没有经验法则?

  • 基本上,我应该重构并做下面的DisposableDataManager课程,non- static还是把一切都留下来GC好吗?

.

public static class DisposableDataManager
{
    // ImageList is an 'IDisposable'.
    public static ImageList FirstImageList { get; private set; }
    public static ImageList SecondImageList { get; private set; }

    static DisposableDataManager()
    {
        FirstImageList = CreateFirstImageList();
        SecondImageList = CreateSecondImageList();        
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

c# static garbage-collection dispose winforms

11
推荐指数
2
解决办法
6750
查看次数

C++ - 实现我自己的流

你好!我的问题可以通过以下方式描述:

我有一些数据实际上是一个数组,可以表示为char* data与一些size

我还有一些遗留代码(函数),它将一些抽象std::istream对象作为参数,并使用该流来检索要操作的数据.

所以,我的问题是以下 - 将我映射data到某个std::istream对象的简单方法是什么,以便我可以将它传递给我的函数?我想过std::stringstream从我创建一个对象data,但这意味着复制和(我认为)并不是最好的解决方案.

任何想法如何可以这样做使我std::istream的上操作data直接?

谢谢.

c++ string std stream

10
推荐指数
2
解决办法
5000
查看次数

C++模板问题

有没有办法实现指定的行为?如果有一些技巧或者可以使用特征来完成enable_if,请告诉我.

template <typename T> struct Functional {

   T operator()() const {

      T a(5);

                // I want this statement to be tranformed into
                // plain 'return;' in case T = void
      return a; // <---
   }
};

int main() {

   Functional<int> a;
   a();

   Functional<void> b;
   b(); // <--- Compilation error here
}
Run Code Online (Sandbox Code Playgroud)

c++ templates

10
推荐指数
2
解决办法
282
查看次数

C++提升前瞻性声明问题

我花了一些时间来检查boost::库架构,并对以下事实感兴趣:

在库的某些部分中,使用的yyy_fwd.hpp想法很常见(参见boost/detailboost/flyweight示例).

这些文件显然只包含一些基于模板的类的前向声明,据我所知,可以在编译时间方面受益.

有人可以指出它们在什么情况下有所帮助,我应该在设计自己的模板时使用相同的想法吗?

谢谢.

c++ boost forward-declaration

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

C#linq联合问题

有人可以解释一下UnionLINQ的工作原理吗?

它被告知它合并两个序列并删除重复.

但我可以以某种方式自定义重复删除行为 - 假设我希望the second sequence在重复或来自的情况下使用该元素the first sequence.

或者即使我希望以某种方式在结果序列中组合这些值?

应该如何实施?


更新

我想我错误地描述了这个问题,假设我们有一些价值:

class Value {
   String name
   Int whatever;
}
Run Code Online (Sandbox Code Playgroud)

并且使用的比较器执行x.name == y.name检查.

让我们说有时我知道我应该从第二个序列中取出元素,因为它的whatever字段比whatever第一个序列的字段更新/更好.

无论如何,我会使用sequence1.Union(sequence2)sequence2.Union(sequence1)改变方法.

谢谢

c# linq union

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

C#等式检查

你对写作平等检查的方法structsclasses创建?

1) "完全"平等检查是否需要多大的样板代码(如override Equals,override GetHashCode,通用Equals,operator==,operator!=)?

2)您是否明确指定您的类为IEquatable<T>接口建模?

3)我是否理解正确,没有实际的方法来自动应用Equals覆盖,当我调用类似的东西时a == b,我总是要实现Equalsoperator==成员?

c# equality

10
推荐指数
2
解决办法
4555
查看次数

C++/Qt如何 - 内存分配有效?

我最近开始为自己调查Qt并提出以下问题:

假设我有一些QTreeWidget* widget.在某些时刻,我想添加一些项目,这是通过以下调用完成的:

QList<QTreeWidgetItem*> items;

// Prepare the items
QTreeWidgetItem* item1 = new QTreeWidgetItem(...);
QTreeWidgetItem* item2 = new QTreeWidgetItem(...);
items.append(item1);
items.append(item2);

widget->addTopLevelItems(items);
Run Code Online (Sandbox Code Playgroud)

到目前为止它看起来还不错,但我实际上并不了解谁应该控制对象的生命周期.我应该用一个例子解释一下:

让我们说,另一个函数调用widget->clear();.我不知道这个调用下面会发生什么,但我确实认为,内存分配item1item2没有得到安置在这里,因为他们的OWNAGE实际上并没有转移.而且,砰的一声,我们有内存泄漏.

问题如下 - 确实Qt可以为这种情况提供一些东西吗?我可以使用boost::shared_ptr或任何其他智能指针,并写出类似的东西

shared_ptr<QTreeWidgetItem> ptr(new QTreeWidgetItem(...));
items.append(ptr.get());
Run Code Online (Sandbox Code Playgroud)

但我不知道Qt本身是否会尝试delete对我的指针进行显式调用(因为我将它们声明为shared_ptr管理状态,这将是灾难性的).

你会如何解决这个问题?也许一切都很明显,我想念一些非常简单的东西?

c++ memory qt memory-leaks shared-ptr

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