这仅仅是出于好奇的缘故,因为我没有使用过new,并delete在C++中,除了最基本的用途.
我知道delete释放记忆.我想知道的是它如何处理更复杂的案件?
例如,如果我有一个这样的用户定义的类:
class MyClass
{
public:
MyClass();
~MyClass()
{
delete [] intArray;
}
//public members here
private:
int* intArray;
};
Run Code Online (Sandbox Code Playgroud)
假设类以某种方式为内存分配内存intArray,然后在析构函数中释放它,如果我像这样使用类,那么:MyClass* myClass = new MyClass();稍后发布它delete myclass;
如何delete处理释放所有内存?是否首先调用类析构函数以释放由类(即int* intArray)分配的所有内存,然后释放分配用于保存类的内存?
如果我有这样的课程怎么办?
class MyClass
{
public:
MyClass();
~MyClass()
{
delete anotherMyClass;
}
//public members here
private:
MyClass* anotherMyClass;
};
Run Code Online (Sandbox Code Playgroud)
假设anotherMyClass没有使用构造函数分配,这会很快耗尽内存,如果有一个MyClasses链如链接列表那么相互附加怎么办?析构函数中的delete语句是否适用于这种情况?anotherMyClass当析构函数被调用时,每个都会被递归释放吗?
您知道的new和delete陈述是否有任何特定的奇怪技巧或警告?
这是一个例子.我有两个类,一个继承,并且都有一个具有相同名称但不同参数的函数:
public class MyClass
{
//public class members
public MyClass()
{
//constructor code
}
public void Copy(MyClass classToCopy)
{
//copy code
}
}
public class InheritedClass : MyClass
{
//public class members
public InheritedClass():base()
{
//constructor code
}
public void Copy(InheritedClass inheritedClassToCopy)
{
//copy code
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何使基类的复制方法(MyClass.Copy)在InheritedClass中不可继承或不可见?我不想这样做:
MyClass a;
InheritedClass b;
b.Copy(a);
Run Code Online (Sandbox Code Playgroud)
这是否有意义,或者我应该保留此功能吗?我甚至可以要求做什么?
我的问题是我需要使用 C# 将文件附加到默认邮件客户端并将其显示给用户,就像使用mailto:.
我读过这篇关于这个主题的文章,但有几个问题:
mailto因为附件不受官方支持。那么,有没有其他简单的方法来解决这个问题呢?是否有另一种简单的方法来弹出默认邮件客户端,其中附件预先填充有 .NET?也许是另一种 MAPI 包装器,但许可证非常宽松?
我是python的新手,你可以告诉我.
如果我有一个清单:
a = [1,2,3,2,1]
Run Code Online (Sandbox Code Playgroud)
评估结果为true:
a == a[::-1]
Run Code Online (Sandbox Code Playgroud)
...但是评估为false:
a == a.reverse()
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我对Tk和包装概念都很陌生,所以请耐心等待.这是我的代码:
from Tkinter import *
class frm_main:
def __init__(self, parent):
self.frame = Frame(parent, bg="green") #green for testing
self.frame.pack(fill="both")
self.canvas = Canvas(self.frame, bg="black", width=1000, height=700)
self.canvas.pack(fill="both")
root = Tk()
main_frm = frm_main(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几种不同的选项和测试,看起来框架和画布都是在x方向上锚定和扩展,但是在y方向上调整大小会留下一堆空白空间.
如何让Frame锚定到窗口的所有边,然后将画布锚定到我框架的所有边?我应该使用Frame吗?
我正在处理一些VB6代码,经常遇到变量,有时数值以'!'结尾.例如(注意结尾myVar!和第二个'!' 2!:
dist! = Sqr(x ^ 2 + y ^ 2!)
Run Code Online (Sandbox Code Playgroud)
这是我正在处理的代码中的一行.是'!' 在这里有任何意义吗?我会认为它确实如此,因为为什么要使用它,但无法找到有关此特定用途的任何文档.
我可能有这个错误,但我已经看到了创建一个在定义中调用自身的重载方法的方法.它是这样的:
public void myFunction(int a, int b)
{
//Some code here
}
public void myFunction(int a) : this (a, 10)
{ }
Run Code Online (Sandbox Code Playgroud)
我知道这不是正确的语法,但由于某种原因我无法在任何地方找到正确的语法.这个的正确语法是什么?
我有一个使用C#COM DLL的VB6应用程序.在托管C++中,我可以编写如下函数:
array<String^>^ GetAManagedArray()
{
//Do stuff and return a managed array
}
Run Code Online (Sandbox Code Playgroud)
然后我可以将返回的托管数组分配给VB6中的数组:
Sub MySub()
Dim strArray() As String
strArray = myComObject.GetAManagedArray
End Sub
Run Code Online (Sandbox Code Playgroud)
这在C++中工作正常,但在C#中,System.Array对象是抽象的,我似乎无法找到与C++相当的托管array<>^.另外,在C#中只是返回string[]不起作用.
C#中托管数组的等价物是什么?
编辑:这是我对功能的确切代码
C#COM功能:
public string[] OneTwoThree()
{
return new string[] { "1", "2", "3" };
}
Run Code Online (Sandbox Code Playgroud)
VB6功能:
Private Sub Form_Load()
Dim test As New ComObjectCSharp
Dim strArr(), strTemp As String
strArr = test.OneTwoThree
strTemp = strArr(0) & " " & strArr(1) & " " & strArr(2)
MsgBox …Run Code Online (Sandbox Code Playgroud) 背景:
我有一个SQLite3数据库,我使用CSharp SQLite来查询数据.我的问题是任何使用JOIN或ORDER BY调用的查询都非常慢(0.1秒使用CSharp-SQLitevs使用orig的0.003秒SQLite).
CSharp SQLite 的最新基准测试表明它最多慢了2倍,这很好,但我的时间要慢30倍.
现在,我已将数据库中的所有必要字段编入索引,并具有相应的主键和外键.另外,原始SQLite运行这些查询很好.
问题:
我必须使用SQLite的托管代码端口,所以我在这里缺少一些东西或者我需要进行的调用CSharp SQLite吗?某处有替代SQLite库端口吗?
我有一个ASP.NET Web应用程序,可以访问服务器上的数据库.我需要的是一种在给定计划中在后台运行代码的方法,该计划从另一个源自动更新服务器数据库.
我知道如何在Windows应用程序中通过添加计时器,将函数链接到计时器刻度事件和启动计时器来执行此操作.我不知道如何在网络应用程序中执行此操作.
是否存在Web应用程序的启动事件或我可以启动此后台进程的某个地方,无论用户在网站上做了什么?
c# ×6
python ×2
vb6 ×2
abstraction ×1
anchor ×1
asp.net ×1
c++ ×1
c++-cli ×1
com ×1
email-client ×1
equivalence ×1
inheritance ×1
list ×1
mapi ×1
marshalling ×1
new-operator ×1
operators ×1
overloading ×1
packing ×1
performance ×1
sqlite ×1
syntax ×1
tkinter ×1