Oi! I C++ använder man sällan pekare utan man använder referenser och de fungerar ju på samma sätt i c#, vb mfl. (I C finns det inte referenser så där använder man pekare vilket ofta ställer till det precis som du säger). Det är ett bra tag sedan jag behövde använda en pekare i c++. Om du tittar på de exempel som följer med DirectX 9 SDK så är C++ versionerna 3-5% snabbare än C# versionerna. C# versionerna har i snitt 30% mindre kod. Att säga att man "sällan" använder pekare i C++ är att förvilla. Pekare används nästan lika mycket i C++ som i C. >Att säga att man "sällan" använder pekare i C++ är att förvilla. Pekare används nästan lika mycket i Nästan varje gång man arbetar med objekt använder man pekare. Man kan ju inte lägga alla objekt på stacken. Gjorde man det skulle man inte kunna returnera objekt från funktioner. >Gjorde man det skulle man inte kunna returnera objekt från funktioner. Det där returnerar inte det skapade objektet utan en kopia av det. Och att kopiera objekt är något som bör undvikas. >Det där returnerar inte det skapade objektet utan en kopia av det. >Hur långt klarar man sig med objekt på stacken?DirectX3D prestanda i C++ vs C#
Sitter och funderar på att ägna lite tid åt att lära mig lite objekt orientering, och samtidigt leka lite med DirectX, med förhoppning om att leka lite med 3D objekt i framtiden.
Min fråga just nu var hur stora prestanda skillnadert det är i C++ vs C#, när det gäller DirectX3D.
Jag har knappat en del C innan, och pekar problem har bidragit till "en del" buggar... Enligt vad jag har förstått så har man tagit bort pekarna i C#?
Mvh PerSv: DirectX3D prestanda i C++ vs C#
När det gäller prestanda spelar språket ingen roll. DirectX funktionerna tar lika lång tid oavsett vilket språk de anropas från så det beror mera på hur mycket logik du skall skriva själv.
VB.NET borde väl vara ett lika gott alternativ som c# för managed directX.
Du lär nog inte lära dig så mycket om objektorientering med directx men det kan väl vara kul ändå.Sv: DirectX3D prestanda i C++ vs C#
Med andra ord, med dagens hårdvara som ofta klämmer ut >100 fps i spel så tror jag inte att 3-5% spelar någon större roll, men att däremot kunna leverera produkten betydligt tidigare kan nog spela mycket roll.
MvhSv:DirectX3D prestanda i C++ vs C#
Sv: DirectX3D prestanda i C++ vs C#
>C++ som i C.
Vad använder man pekare till i C++? Enda jag kan komma på är när man anropar gamla C funktioner eller WindowsAPI men då handler det mest om att sätta "&" framför en variabel.
Möjligtvis kan man använda det när man gör "new" men med STL är det sällan man behöver göra det.Sv:DirectX3D prestanda i C++ vs C#
Sv: DirectX3D prestanda i C++ vs C#
<code=c++>
myobjecttype functionreturningobject() {
myobjecttype objectonstack;
...
return objectonstack;
}
main() {
myobjecttype variableonstack = functionreturningobject();
..
}
</code>Sv:DirectX3D prestanda i C++ vs C#
Sv: DirectX3D prestanda i C++ vs C#
Hur vet du det? De flesta kompilatorer använder väl NRVO vilket innebär att objektet inte kopieras.
>Och att kopiera objekt är något som bör undvikas.
Jodå, och man skall undvika temporära objekt mm men sån optimering får väl räknas som ganska avancerad c++ och knappast något som en nybörjare behöver bry sig om.
Man kan skriva funktionen så här om man vill vara säker på att objektet inte kopieras:
<code=c++>
void getobject(myobjettype& object) {
object.x = ...
}
main() {
myobjecttype variableonstack;
getobject(varibleonstack);
..
}
</code>
Fortfarande inga pekare (om du inte menar att referenser är pekare men i så fall använder man ju pekare lika ofta i VB)Sv: DirectX3D prestanda i C++ vs C#
Så länge de behövs :-)
Jag tycker det är dålig programmering om man har funktioner som skapar objekt som anroparen förväntas ta hand om. Om en funktion tillverkar något objekt som skall överleva funktionsanropet bör den returnera objektet på ett eller annat sätt. (eller också spara det i någon klassvariabel)